<<< VB.NET >>> '----- 構造体定義 ----- <StructLayout(LayoutKind.Sequential)> _ Public Structure Global_Infor <MarshalAs(UnmanagedType.ByValArray)> _ Dim para1() As Byte
<MarshalAs(UnmanagedType.ByValArray)> _ Dim para2( , ) As Byte
Public Sub Initialize() ReDim para1(63) ReDim para2(9, 7) End Sub
End Structure
Public Declare Function SysInfor Lib "SysInfor.dll" _ (ByRef TestInfor As Integer, _ <MarshalAs(UnmanagedType.Struct)> ByRef GInfor As Global_Infor ) As Integer
分類:[.NET]
初めまして。
現在、VB.NET、VC++.NETでの開発を行っているのですが、題名の通りにVB側から
VCで作成した関数を呼ぶと以下のようなエラーが表示されます。
---------------------------------------------------------------------------
'System.TypeLoadException' の初回例外が Sample.exe で発生しました。
追加情報 : 型 Global_Infor のフィールド para2 をマーシャリングできません :
この型は構造体フィールドとして、マーシャリングできません。
---------------------------------------------------------------------------
Global_Inforの定義、呼び出し形式は以下のようにしています。
<<< VB.NET >>>
'----- 構造体定義 -----
<StructLayout(LayoutKind.Sequential)> _
Public Structure Global_Infor
<MarshalAs(UnmanagedType.ByValArray)> _
Dim para1() As Byte
<MarshalAs(UnmanagedType.ByValArray)> _
Dim para2( , ) As Byte
Public Sub Initialize()
ReDim para1(63)
ReDim para2(9, 7)
End Sub
End Structure
Public Declare Function SysInfor Lib "SysInfor.dll" _
(ByRef TestInfor As Integer, _
<MarshalAs(UnmanagedType.Struct)> ByRef GInfor As Global_Infor ) As Integer
<<< VC++.NET >>>
typedef struct{
char para1[64];
char para2[10][8];
} Global_Infor;
DLL_EXPORT int SysInfor(
int *TestInfor,
Global_Infor *dp1
)
{
・
・
・
}
---------------------------------------------------------------------------
1次元配列では出来るのですが2次元配列のマーシャリングの定義方法がどうしても分かりません。
今回のプログラムはVB6.0、VC6.0から移行したプログラムで、実際.NETでプログラムを
行うのはこれが初めてとなります。
社内でもまだ開発を行った人員もいない為、解決の方法が見つからない状況です。
上記のプログラムもエラーは出ていないだけで、ツッコミどころ満載だとは思いますが
より良い方法等があれば教えて頂けないでしょうか。
よろしくお願い致します。