- - PR -
2次元配列のマーシャリング方法
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-06-17 21:17
度々、お世話になります。
ネイティブコードで作成したDLLから、 データを取得しようとした場合にエラーとなり、 行き詰まっています。 ちょっとしたことでも良いので、 アドバイスをお願い致します。 開発環境:VC++.NET 2002 Windows Form DLL側の構造体中の変数で、 2次元配列の変数がある場合にエラーとなってしまいます。 エラー内容は、以下のとおりです。
まずはDLL側(Sample.dll)のソースです。
次に呼び出し側のソースです。
エラーにあるように、 2次元配列のマーシャリング方法が正しくないように思えます。
上記の構造体で、どのように記述するのか、 アドバイスをお願いします。 (VBやC#の記述でも構いません。) 宜しくお願い致します。 | ||||||||||||||||
|
投稿日時: 2008-04-03 16:48
あまり自信はありませんが、これでどうでしょうか。
(C#で説明させていただきます) 配列に対する既定のマーシャリング http://msdn2.microsoft.com/ja-jp/library/z6cfh6e6(vs.80).aspx#cpcondefaultmarshalingforarraysanchor2 の中で ================ double ar[10][20] ================ を ================ [MarshalAs(UnmanagedType.LPArray, SizeConst=200)] double[] ar ================ と展開しているところから推測するに、問題の部分を ================ [MarshalAs(UnmanagedType::ByValTStr, SizeConst=(5 * 256))]String FileName; ================ というようにマーシャリングすれば、 とりあえずエラー回避はできるのではないかと思います。 マーシャリングの変換に多次元配列の概念がないとか、 そんなような記述をどこかで読んだがします。 なので一次元で最大サイズを確保すれば受け渡すだけならうまくいくのではないかと。 |
1