■No10060 (トップオブツヨシ さん) に返信
> Public Function sbGETFile(ByVal strFile As String) 'strFileは参照するファイル名がセット
戻り値を利用しないのであれば、Function ではなく、Sub を使うべきかと。
> ファイルの中身********
> 1byte目 AAAデータ
> 2byte目 BBBデータ
> 3byte目 CCCデータ
> 4byte目 CCCデータ
> 5byte目 CCCデータ
これでは駄目ですよ。ファイル内に『配列サイズ』などが定義されていませんので。
たとえば、今回の TEST_TYPE 構造体に対して
.AAA = &H12
.BBB = &H34
.CCC(0) = &H56
.CCC(1) = &H78
.CCC(2) = &H9A
というデータを求める場合、ファイルの内容は 15バイトの
12 34 01 00 03 00 00 00 00 00 00 00 56 78 9A
でなければなりません。これは、下記の意味を持ちます。
位置 内容 意味
------ -------- -----------------------------------------------------------------
00 12 Byte値18。AAAを意味する。
01 34 Byte値52。BBBを意味する。
02-03 01 00 Short値1。CCC配列の次元数を意味する。
04-07 03 00 00 00 Integer値3。CCC配列の1次元目の長さを意味する。
08-0B 00 00 00 00 Integer値0。CCC配列の1次元目の下限値を意味する。VB.NETでは0固定。
0C 56 Byte値170。CCC(0)を意味する。
0D 78 Byte値187。CCC(1)を意味する。
0E 9A Byte値204。CCC(2)を意味する。
> 『ストリームの終わりを超えて読み取ることはできません。』
今回の場合、3バイト目以降(位置02〜)のデータが不正だったので、その(誤って指定された)配列サイズが、
実際のファイルサイズを超えてしまう結果となり、ファイル終端を越えた読み取りが発生したのでしょう。
あるいはデータを修正するのではなく、ソース側を修正することができるのであれば、
> ファイルの中身********
> 1byte目 AAAデータ
> 2byte目 BBBデータ
> 3byte目 CCCデータ
> 4byte目 CCCデータ
> 5byte目 CCCデータ
を読み込むために、TEST_TYPE 構造体の定義を
Public AAA As Byte
Public BBB As Byte
<VBFixedArray(2)> Public CCC() As Byte
のように変更するという回避策もあります。