gpt4 book ai didi

c++ - 如何将 IStream 实例中的数据读入 char 指针?

转载 作者:可可西里 更新时间:2023-11-01 10:39:29 25 4
gpt4 key购买 nike

我试图从我的 IStream 实例中复制一些二进制数据(因为 Gdiplus::Image 只保存到 IStream 派生对象或文件路径)到一个字符指针,我可以通过知道分配的二进制文件从中简单地读取大小并可以访问指针。

我的类如下:

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());

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

我做错了什么?

提前致谢。

附言:测试图像实例从 m_hBufferStream 读取后成功保存到文件。

最佳答案

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

其次,您没有检查 Read() 返回的 HRESULT

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

关于c++ - 如何将 IStream 实例中的数据读入 char 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7122571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com