VB.NETで、構造体をファイルに書き込む

  バイナリファイルへのアクセス



こんなもの、最近は必要無いかもしれませんが、
7-zip32.dll のラッパークラス作ってて思いついたので試してみたら使えました。

C++ の結果と比べましたが、構造体のアラインメントまで一致してました。



  
Imports System.Runtime.InteropServices

Public Class Form1

	' ********************************************************
	' * 構造体定義
	' ********************************************************
	<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
	  Public Class INDIVIDUALINFO
		Public dwOriginalSize As Integer = 1
		Public dwCompressedSize As Integer = 1
		Public dwCRC As Integer = 1
		Public uFlag As Integer = 1
		Public uOSType As Integer = 1
		Public wRatio As Short = 1
		Public wDate As Short = 1
		Public wTime As Short = 1
		<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=513)> _
		 Public szFileName As String = "A"
		<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=3)> _
		  Public dummy1 As String = "B"
		<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
		 Public szAttribute As String = "C"
		<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=8)> _
		 Public szMode As String = "D"
	End Class

	<DllImport("Kernel32.dll", CharSet:=CharSet.Ansi, EntryPoint:="RtlMoveMemory")> _
	Private Shared Sub CopyMyStruct( _
	   ByVal forFile As Byte(), _
	   <[In](), Out()> ByVal Source As INDIVIDUALINFO, _
	   ByVal Length As Integer)
	End Sub

	Private Sub Button1_Click(ByVal sender As System.Object, _
	ByVal e As System.EventArgs) Handles Button1.Click

		Dim data As New INDIVIDUALINFO()
		Dim forFile As Byte() = New Byte(Marshal.SizeOf(data) - 1) {}

		CopyMyStruct(forFile, data, Marshal.SizeOf(data))
		System.IO.File.WriteAllBytes("struct_test.dat", forFile)

	End Sub
End Class
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ