バイナリデータファイルから配列化した構造体に入れる方法
- 題名: バイナリデータファイルから配列化した構造体に入れる方法
- 著者: のん
- 日時: 2011/02/11 12:57:34
- ID: 28151
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: バイナリデータファイルから配列化した構造体に入れる方法
- 著者: shu
- 日時: 2011/02/12 12:41:15
- ID: 28154
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: バイナリデータファイルから配列化した構造体に入れる方法
- 著者: のん
- 日時: 2011/02/12 15:41:55
- ID: 28155
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
VB.net(XP:VS2008のみフルインストール)にて
バイナリデータファイルから入力したデータを
配列化した構造体bn_dataに入れたいと考えています。
ネットで検索したのですが、いまいち方法がわかりません。
どなたか、お教え願えないでしょうか?
構造体
---------------------------------------------------------
<StructLayout(LayoutKind.Sequential)> _
Public Structure bn_file
Public aa As Integer
Public bb As Integer
Public cc As Integer
<VBFixedString(4), System.Runtime.InteropServices.MarshalAs _
(System.Runtime.InteropServices.UnmanagedType.ByValTStr, _
SizeConst:=4)> Public dd As String
End Structure
読み込み部分
---------------------------------------------------------
Dim bn_data(10) As bn_file
Dim fileNm As String
fileNm = 読み込むバイナリデータファイル名
☆ Dim btBuf As Byte() = My.Computer.FileSystem.ReadAllBytes(fileNm)
Dim gArray2 As System.Runtime.InteropServices.GCHandle = _
System.Runtime.InteropServices.GCHandle.Alloc(btBuf, _
GCHandleType.Pinned)
Dim gAddress2 As Integer = gArray2.AddrOfPinnedObject().ToInt32
★ Dim gArray1 As System.Runtime.InteropServices.GCHandle = _
System.Runtime.InteropServices.GCHandle.Alloc(bn_data, _
GCHandleType.Pinned)
Dim gAddress1 As Integer = gArray1.AddrOfPinnedObject().ToInt32
△ MoveMemory(gAddress1, gAddress2, btBuf.Length)
gArray2.Free()
gArray1.Free()
☆の部分でファイルからバイト配列に読み込み、
△の部分でバイト配列から構造体に入れようと考えましたが、
★印のところで以下のエラーとなってしまいます。
「ArgumentExceptionはハンドルされませんでした。
オブジェクトにプリミティブでないか、またはblittableでないデータが
含まれています。」
よろしくお願いします。