如何通过套接字连接在 IStream 接口中发送使用 GdipSaveImageToStream() 存储的图像?
send() 函数需要一个 char 数组,但我不知道如何将数据从 IStream 提取到 char 数组。
使用 memcpy() 会是个好主意吗?将数据存储在 char 数组中并在另一端重建流?
[编辑]
我尝试使用 read 但我错过了一些东西。
//stream to char array, to send
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, to save
if(myStreamR->Write(streamData, myStreamStats.cbSize.QuadPart, &bytesSaved) == S_OK)
cout<<"OK!"<<endl;
else
cout<<"Not OK!"<<endl;
myImage = Image::FromStream(myStreamR);
myImage->Save(lpszFilename, &imageCLSID, NULL);
[注1:]程序编译并运行,但我没有得到我的图像。如果我使用原始的“myStream”而不是“myStreamR”,它是由从原始流中读取的字符数组构造的,我会得到它。
[注意2:] 输出是两个“OK!”,这意味着所有字节都被复制到数组中,并且都被粘贴到新的流中。但是,我检查了 savedBytes,我发现在 read() 之后它是 0(不好),而在 write() 之后它等于我给的流大小。那么,如果什么都没读,为什么 read() 会给我一个“S_OK”标志呢?
[注3:]我错过了一些东西。