C#
で書かれたアプリケーションがあり、C
で書かれたDLLが使用されています。 一部のデリゲート(関数ポインタ)を通じて、私はC
関数を呼び出すことができました。この関数は、一部のデータに対して多くの処理を行い、処理されたバイナリデータをデータのサイズとともにC#
コードに戻すことが期待されています。アンマネージドコード(C)からマネージコード(C#)にデータを渡します。
private unsafe delegate void MyCallback (IntPtr cs_buf, Int32 cs_size);
そして、私のように私のC code
からこれを呼び出しています:
管理c#
関数のプロトタイプは、管理C#
コードで
void* c_buf = NULL;
int c_size = 0;
.... some processing here to fill buf and size......
MyCallback (c_buf, c_size);
、私は、関数を呼び出す必要がありますプロトタイプを持つMyCallback
から:
void foo (byte[] cs_buf, int cs_size)
今cs_size
値に問題はないが、それはC#コードでbyte[]
として使用することができるように、CコードからC#コードをバイナリバッファを通過/使用する正しい方法は何です。
私がしていることが正しい方法であれば、受信したIntPtr cs_buf
をbyte[]
に変換する推奨方法は何ですか?
おかげで、 ビクラム
プロジェクトにマネージC++コードがなく、これがこの1回の呼び出しである場合は、これが最適なソリューションです。 –
+1。それはうまくいった。ありがとう:)しかし、私はちょうど考えていた、これは余分なコピーオーバーヘッドを導入していないのですか? –
これはありますが、管理されたC++がなく、そのような呼び出しが多くなく、パフォーマンスがそれほど重要ではない場合は、依然として最良のソリューションです。私の答えは余分なコピーを避けるために使うことができますが、ドットネットアセンブリにコンパイルできるC++プロジェクトを作る必要があります。 –