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;
}
ここでも問題は、"buffer" には有効なデータが含まれているように見えますが、読み取り後も "myPtr" にはまだ "0" が含まれていることです。