Я пытаюсь использовать System.Runtime.InteropServices.ComTypes.IStream из C#, но у меня возникают проблемы. Согласно 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" после чтения, хотя "buffer", кажется, содержит достоверные данные.