|
回答してくださった方々、どうもありがとうございました。
VB.NETの構造体配列をC++のポインタに渡すコードをここに記しておきます。 他の悩める人々の参考になればと思います。
***宣言*** Public aaaDispText(199) As DISPTEXT
***構造体*** Structure DISPTEXT
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=31)> Public aaaFont() As Byte 'フォント名称
Public Sub Initialize() Dim Def_aaaFont(31) As Byte aaaFont = Def_aaaFont End Sub End Structure
***コード*** Sub aaa() Dim lng As Integer Dim Msg_page As Integer = 3 Dim lngcount As Integer Dim i As Integer Dim x As Integer Dim sizeX As Integer Dim ptrX As IntPtr
'初期化 For i = 0 To 199 gcaDispText(i).Initialize() Next i
'アンマネージメモリに確保するサイズ sizeX = 200 * 104
'アンマネージメモリにメモリ割り当て ptrX = Marshal.AllocHGlobal(sizeX)
'dll GetDispText(Msg_page , ptrX, lngcount)
'マネージ配列の定義 Dim byRetX(sizeX - 1) As Byte
'アンマネージメモリのデータをマネージ配列にコピー Marshal.Copy(ptrX, byRetX, 0, sizeX)
'マネージ配列を元の配列に格納 For i = 0 To 199 For x = 0 To 31 aaaDispText(i).aaaFont(x) = byRetX(x + 104 * i) Next x Next i
'アンマネージメモリの解放 Marshal.FreeHGlobal(ptrX)
'以下省略
End Sub
***dll呼び出し*** Public Declare Function GetDispText Lib "aaa.dll" ( ByVal lDNo As Integer, Byval staTextData As IntPtr, ByRef lC As Integer) As Integer
|