【发布时间】:2011-09-15 17:18:29
【问题描述】:
我有一个用 c++ 编写的 dll 导出的函数,其签名如下:
Foo( LPSTREAM *pStream, UINT &Size )
返回一个内存流,显然它的大小。我遇到的困难是为导出的函数创建签名,然后尝试在 C# 中读取流。曾经可以使用“不安全”字节指针来获取信息,但这不符合我们的要求。
任何想法、示例、示例等将不胜感激。
【问题讨论】:
标签: c# pinvoke unmanaged istream
我有一个用 c++ 编写的 dll 导出的函数,其签名如下:
Foo( LPSTREAM *pStream, UINT &Size )
返回一个内存流,显然它的大小。我遇到的困难是为导出的函数创建签名,然后尝试在 C# 中读取流。曾经可以使用“不安全”字节指针来获取信息,但这不符合我们的要求。
任何想法、示例、示例等将不胜感激。
【问题讨论】:
标签: c# pinvoke unmanaged istream
你可以这样做:
[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)。
顺便说一句,既然IStream 知道它的大小并且如果你要求它会告诉你,为什么将Size 与流分开返回?
【讨论】:
IStream 的接口,正如错误消息所述。