0

次の署名でc++で記述されたdllからエクスポートされた関数があります。

Foo( LPSTREAM *pStream, UINT &Size ) 

これはメモリストリームと明らかにそのサイズを返します。私が苦労しているのは、エクスポートされた関数の署名を作成してから、C#でストリームを読み取ろうとすることです。ある時点で、「安全でない」バイトポインタを使用して情報を取得できましたが、これは要件に適合していません。

任意の考え、例、サンプルなどをいただければ幸いです。

4

1 に答える 1

0

これは次のように行うことができます。

[DLLImport(@"mydll.dll")]
public static extern void Foo(out ComTypes.IStream Stream, ref uint Size);

次のように呼び出します。

ComTypes.IStream Stream = null;
uint Size;
Foo(out Stream, ref Size);

通常どおり、呼び出し規約が一致していることを確認してください (C# のデフォルトは stdcall、C++ のデフォルトは cdecl)。


余談ですが、そのサイズを知っていて、要求すれば教えてくれるのにSize、ストリームから別のものを返すのはなぜですか?IStream

于 2011-06-15T17:02:50.977 に答える