C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

マーシャリングについて


(過去ログ 7 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■7171 / inTopicNo.1)  マーシャリングについて
  
□投稿者/ cona 二等兵(1回)-(2006/10/04(Wed) 09:43:45)

分類:[C#] 


分類:[C#] 

以下のような、アンマネージのDLL関数があり、それをC#で使いたくDllImportを使いましたが、
実際に使用するにあたって、型の不一致によるビルドエラーが発生しました。

【アンマネージDLL関数】
LPBYTE GetImageAlloc(INT iSize);
INT GetImageData(LPBYTE pbBuffer, INT iSize);

【C#】
[DllImport("hogehoge.dll")]
extern static IntPtr GetImageAlloc(int size);
[DllImport("hogehoge.dll")]
extern static int GetImageData([In, Out] byte[] buffer, int size);

int size = 100;
IntPtr buffer = GetImageAlloc(size);
GetImageData(buffer, size); // ← 方の不一致によるエラー

マーシャリングについて、MSDNで検索したつもりですが、解決方法が見つかりません。
GetImageData(???, size) ???の部分はどのように記述すればよいのでしょうか?
それとも別の部分で間違った記述を行なっているのでしょうか?

試しに、以下のように変更するとビルドエラーも発生せずに、
期待した値がbufferに格納されていることを確認しました。
しかし、アンマネージでの宣言を変えてしまっている気がして。。。

[DllImport("hogehoge.dll")]
public static extern int GetImageData(IntPtr buffer, int size);


どうか、宜しくお願いします。



0
引用返信 編集キー/
■7175 / inTopicNo.2)  Re[1]: マーシャリングについて
□投稿者/ Blue 曹長(99回)-(2006/10/04(Wed) 09:56:35)

分類:[C#] 

>しかし、アンマネージでの宣言を変えてしまっている気がして。。。
と感じるのであれば、
>[DllImport("hogehoge.dll")]
>extern static IntPtr GetImageAlloc(int size);
も、かえてしまっているようですけど。

LPBYTE といっても結局はポインタ型ですので、IntPtrでいいのではないでしょうか?

0
引用返信 編集キー/
■7183 / inTopicNo.3)  Re[2]: マーシャリングについて
□投稿者/ cona 二等兵(3回)-(2006/10/04(Wed) 12:36:37)

分類:[C#] 

> LPBYTE といっても結局はポインタ型ですので、IntPtrでいいのではないでしょうか?

Blue さんありがとうございました。
IntPtrでいきます。

0
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -