如何从一个IStream实例读取数据到一个字符指针?

我想从我的IStream实例(因为Gdiplus ::图像只保存到IStream派生对象,或文件path)的一些二进制数据复制到一个字符指针,从中我可以读取只需知道分配的二进制大小,并有访问指针。

我的课程如下:

Upload::Upload(Gdiplus::Bitmap* bitmap, CLSID clsEncoderId) { int result; STATSTG statResult; result = CreateStreamOnHGlobal(0, TRUE, &m_hBufferStream); if (result != S_OK) MessageBoxW(NULL, _T("Upload::Upload(): Could not create stream"), _T("Point"), MB_OK | MB_ICONERROR); else { if (bitmap->Save(m_hBufferStream, &clsEncoderId, NULL) != Gdiplus::Ok) MessageBoxW(NULL, _T("Upload::Upload(): Could not save() image"), _T("Point"), MB_OK | MB_ICONERROR); } if (m_hBufferStream->Stat(&statResult, STATFLAG_NONAME) != S_OK) return; Gdiplus::Image test(m_hBufferStream, TRUE); test.Save(_T("hejs.png"), &clsEncoderId, NULL); m_iSize = statResult.cbSize.LowPart; } char* Upload::GetBinaryData() { char* buffer = (char*)malloc(m_iSize); ULONG size = 0; m_hBufferStream->Read(buffer, m_iSize, &size); return buffer; } 

在我的函数处理上传实例我这样做:

 char* pBuffer = upload->GetBinaryData(); buffer.write(pBuffer, upload->GetSize()); 

但是,存储的内存是错误的(奇怪的是它看起来像一个模式虽然)。

我究竟做错了什么?

提前致谢。

PS:testingImage-instance从m_hBufferStream读取后成功保存到文件中。

首先, IStream::Read()不需要精确地读取指定的字节数 – 它只需要读取不超过该数字。 实际的数字存储在第三个参数所指向的veriable内。

其次,你不检查Read()返回的HRESULT

一个更好的策略是在一个循环中调用Read() ,检查它的返回值,并根据实际读取的字节数调整指向缓冲区的指针。