VB.NETからDLLへ構造体を渡すところで質問させて下さい。
現在、2つの構造体のテーブルをVC++.NETで作成した関数へ渡し、関数内から値を
取得しようとしています。
ところが「TestInfor2」の方は正しい値が取得できるのですが、「TestInfor1」は
はじめのテーブルしか値が入らず、それ以降は値が入りません。
しかもその後、エリアを壊しているようで、例外エラーとなってしまいます。
DLL側で渡された「TestInfor1」の内容を確認すると配列分のアドレスが上手く渡せて
いないように見えました。
試しに「TestInfor1」を渡さないようにしてみると例外エラーも出ず、処理出来ました。
色々と調べてはみたのですが解決方法が見つからず、実際、VB.NETを始めたばかりなの
で何が悪いかも検討がつかない状況です。
些細な事でも構いませんので、どうかお力を貸していただけないでしょうか。
長文で申し訳ありませんが、よろしくお願いします。
--- VB ---
''## 構造体定義 ##
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure TestInfor1
<VBFixedArray(63), MarshalAs(UnmanagedType.ByValArray, SizeConst:=64)> _
Dim data1() As Byte
<VBFixedArray(79), MarshalAs(UnmanagedType.ByValArray, SizeConst:=80)> _
Dim data2() As Byte
<VBFixedArray(4), MarshalAs(UnmanagedType.ByValArray, SizeConst:=5)> _
Dim data3() As Integer
Public Sub Initialize()
ReDim data1(63)
ReDim data2(79)
ReDim data3(4)
End Sub
End Structure
<StructLayout(LayoutKind.Sequential)> _
Public Structure TestInfor2
Dim data1 As Integer
Dim data2 As Integer
End Structure
Public Infor1(50) As TestInfor1
Public Infor2(50) As TestInfor2
''## DLL呼び出し ##
TestInfoGet( para1, Infor1(0), Infor2(0) )
''## DLL定義 ##
Public Declare Function TestInfoGet Lib "TestInfo.dll" _
(ByRef para1 As Integer
<MarshalAs(UnmanagedType.Struct)> ByRef TInfor1 As TestInfor1, _
<MarshalAs(UnmanagedType.Struct)> ByRef TInfor2 As TestInfor2) As Integer
--- VC ---
''## 構造体定義 ##
typedef struct Infor1 {
char Name[64];
char BanRyaku[10][8];
int BanCode[4];
} TestInfor1 ;
typedef struct Infor2 {
int data1;
int data2;
} TestInfor2 ;
#define DLL_EXPORT __declspec(dllexport)
DLL_EXPORT int
TestInfoGet(
int *para1,
TestInfor1 *dp1,
TestInfor2 *dp2
)
{
for( i = 0; i < 49; i++ )
{
memcpy ( dp1, &TestData1[i], sizeof(TestInfor1) );
dp1++;
}
for( i = 0; i < 49; i++ )
{
dp2->data1 = TestData2.data1 ;
dp2->data2 = TestData2.data2 ;
dp2++;
}
}