1

そこで、OCX オブジェクトのマネージド ラッパーである関数を呼び出そうとしています。大きな困難を抱えています。機能は次のとおりです。

foo(System::Object ^% theBuffer)

ここで、「theBuffer」はバイト配列です。「foo」がラップするアンマネージド OCX のテンプレートは次のとおりです。

goo(VARIANT* theBuffer);

だから私は試しました。

System::Int32 buf[10];
foo(buf);

これは失敗します。と

Bitmap ^b;
foo(b);

これはコンパイルされますが、明らかに呼び出された関数は.NETビットマップを作成しません。

したがって、問題は、この関数に書き込み可能なメモリ ブロックを渡し、.NET の世界でアクセスできるようにする方法だと思います。

ありがとう

4

3 に答える 3

1

VARIANTaをバッファに直接変換することはできません。

まず、 をチェックして、どのような種類のオブジェクトが格納されているかを確認する必要がありますtheBuffer->vt。戻り値は型になりVARTYPEます。

于 2009-02-04T17:21:03.067 に答える
0

のようなものはどうですか..

Bitmap ^b = gcnew Bitmap(...
foo(b);
于 2009-02-04T17:50:05.410 に答える