次の署名でc++で記述されたdllからエクスポートされた関数があります。
Foo( LPSTREAM *pStream, UINT &Size )
これはメモリストリームと明らかにそのサイズを返します。私が苦労しているのは、エクスポートされた関数の署名を作成してから、C#でストリームを読み取ろうとすることです。ある時点で、「安全でない」バイトポインタを使用して情報を取得できましたが、これは要件に適合していません。
任意の考え、例、サンプルなどをいただければ幸いです。
これは次のように行うことができます。
[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