ソケット接続を介して画像を送信しようとしていますが、次のコードに問題があります。
//stream to char array
STATSTG myStreamStats;
ULONG bytesSaved;
myStream->Stat(&myStreamStats, 0);
char* streamData = new char[myStreamStats.cbSize.QuadPart];
if(myStream->Read(streamData, myStreamStats.cbSize.QuadPart, &bytesSaved) == S_OK)
cout<<"OK!"<<endl;
else
cout<<"Not OK!"<<endl;
//char array to stream
if(myStreamR->Write(streamData, myStreamStats.cbSize.QuadPart, &bytesSaved) == S_OK)
cout<<"OK!"<<endl;
else
cout<<"Not OK!"<<endl;
//saving the image to a file
myImage = Image::FromStream(myStreamR);
myImage->Save(lpszFilename, &imageCLSID, NULL);
プログラムはコンパイルされて実行されますが、イメージが取得されません。元の「myStream」を使用した場合は取得できますが、元のストリームから読み取ったchar配列から構築された「myStreamR」を使用した場合は取得できません。
出力は2つの「OK!」です。これは、すべてのバイトが配列にコピーされ、すべてが新しいストリームに貼り付けられることを意味します。ただし、savedBytesを確認したところ、read()の後の値は0(良くない)であり、write()の後は指定したストリームサイズと等しいことがわかりました。では、なぜ地球上でread()が読み取られ、何も読み取られない場合に「S_OK」フラグが表示されるのでしょうか。