DOBON.NET DOBON.NETプログラミング掲示板過去ログ

多次元配列のマーシャリングについて

  • 題名: 多次元配列のマーシャリングについて
  • 著者: にゃんこ
  • 日時: 2004/05/13 18:51:19
  • ID: 4022
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[環境:Windows2000 使用言語:VB.NET、VC++.NET]
分類:[.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でプログラムを
行うのはこれが初めてとなります。
社内でもまだ開発を行った人員もいない為、解決の方法が見つからない状況です。

上記のプログラムもエラーは出ていないだけで、ツッコミどころ満載だとは思いますが
より良い方法等があれば教えて頂けないでしょうか。

よろしくお願い致します。

DOBON.NET | プログラミング道 | プログラミング掲示板