我正在尝试使用C# 中的System.Runtime.InteropServices.ComTypes.IStream,但遇到了一些麻烦。根据 MSDN,C# 定义如下所示:
void Read(
byte[] pv,
int cb,
IntPtr pcbRead
)
基本上,我可以从流中读取数据,但上面的“pcbRead”值始终为“0”(即使字节数组包含我的数据)。做一些阅读,似乎 pcbRead 参数正确设置有点棘手(尽管我对 C# 相当陌生)。
无论如何,我的代码基本上是这样的:
myPtr = (IntPtr)0;
int buffSize = 8192;
byte[] buffer = new byte[buffSize];
while (true)
{
strm.Read(buffer, buffSize, myPtr);
fs.Write(buffer, 0, myPtr.ToInt32());
if (myPtr.ToInt32() < buffSize) break;
}
同样,问题是“myPtr”在读取后仍然包含“0”,尽管“缓冲区”似乎包含有效数据。