C#とC++で作ったDLLのメモリについて
- 題名: C#とC++で作ったDLLのメモリについて
- 著者: rk
- 日時: 2009/06/11 9:51:46
- ID: 24717
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C#とC++で作ったDLLのメモリについて
- 著者: オショウ
- 日時: 2009/06/11 10:20:35
- ID: 24718
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: C#とC++で作ったDLLのメモリについて
- 著者: Hongliang
- 日時: 2009/06/11 10:35:59
- ID: 24719
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: C#とC++で作ったDLLのメモリについて
- 著者: rk
- 日時: 2009/06/11 11:08:30
- ID: 24720
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#とC++で作ったDLLのメモリについて
- 著者: Hongliang
- 日時: 2009/06/11 11:36:23
- ID: 24721
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: C#とC++で作ったDLLのメモリについて
- 著者: オショウ
- 日時: 2009/06/11 11:42:52
- ID: 24722
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: C#とC++で作ったDLLのメモリについて
- 著者: rk
- 日時: 2009/06/11 13:06:41
- ID: 24723
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: C#とC++で作ったDLLのメモリについて
- 著者: Hongliang
- 日時: 2009/06/11 13:09:10
- ID: 24724
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: C#とC++で作ったDLLのメモリについて
- 著者: rk
- 日時: 2009/06/11 14:46:04
- ID: 24725
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
皆さんこんにちは、前回は非常に有効なアドバイスを
いただきまして、誠にありがとうございました。
今回は、C#でのメモリについてお聞きしたいことがあり、投稿させていただきました。
*やりたいこと*
C++で作ったDLLに、C#アプリケーションからポインタ配列(IntPtr[])を渡して
DLL内に作られたメモリ空間をC#側で扱いたいのです。
*やってみたこと*
DLLImportしたい関数は、Hoge( LPVOID* lpBuff, int size );
という単純にlpBuff[]をDLLに渡し、DLL内でメモリを確保して
それぞれのメモリをi個分lpBuffに格納するものです。
lpBuff[i]個
lpBuff[0] = 512kbytesサイズのメモリ
lpBuff[1] = 512kbytesサイズのメモリ
...
lpBuff[i] = 512kbytesサイズのメモリ
というポインタのポインタが帰ってくることを想定しています。
CやC++なら、LPVOID* lpMemをそのまま渡して扱うことができますが、
C#での宣言ではこんな形にしました。
[DLLImport("hoge.dll")]
Hoge( out IntPtr[] buff, int size );
private IntPtr[] buff;
buff = new IntPtr[3];
int size;
Hoge( out buff, size );
こんな形で使っているのですが、
さて、取りえたIntPtrのメモリポインタを、
どうやってC#のbyte配列にコピーしたものか?と悩んでおります。
そこで過去ログや他サイトを参考にいろいろ考えてみたのですが、
いまいちよく分かりません...
LPVOID*を要求する関数でこけてしまっている感じなのです。
上記の関数を呼ぶとアプリケーションごと落ちてしまうので、
おそらくDLLへちゃんとC#の変数がわたっていないように思えます。
C++からこの関数を使うと問題なく動作することが分かっているのですが、
C#ではどのように記述するかご教示願えれば幸いです。