PInvoke和IStream

时间:2011-06-15 16:50:20

标签: c# pinvoke unmanaged istream

我有一个用c ++编写的dll导出的函数,带有以下符号:

Foo( LPSTREAM *pStream, UINT &Size ) 

返回内存流,显然是它的大小。我遇到的困难是为导出的函数创建一个签名,然后尝试在C#中读取流。有一次能够使用“不安全”字节指针来获取信息,但这不符合我们的要求。

任何想法,例子,样品等都将不胜感激。

1 个答案:

答案 0 :(得分: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与流分开?