VC6.0 MFC程序 Ipicture::getWidth(&m_width)时出现内存读写错误

错误图片如上。我用Ipicture来加载图片,代码如下CFilem_file("res\\123.png",CFile::modeRead);AfxMessageBox(... 错误图片如上。
我用Ipicture来加载图片,代码如下
CFile m_file("res\\123.png",CFile::modeRead );
AfxMessageBox("打开成功");
//获取文件长度
DWORD m_filelen = m_file.GetLength();
AfxMessageBox("获取长度成功");
//在堆上分配空间
HGLOBAL m_hglobal = GlobalAlloc(GMEM_MOVEABLE,m_filelen);
AfxMessageBox("分配内存成功");
LPVOID pvdata = NULL;
//锁定堆空间,获取指向堆空间的指针
pvdata = GlobalLock(m_hglobal);

//将文件数据读区到堆中
m_file.Read(pvdata,m_filelen);
AfxMessageBox("读取文件成功");
IStream* m_stream;

GlobalUnlock(m_hglobal);

//在堆中创建流对象
CreateStreamOnHGlobal(m_hglobal,TRUE,&m_stream);

//利用流加载图像
OleLoadPicture(m_stream,m_filelen,TRUE,IID_IPicture,(LPVOID*)&m_picture);
AfxMessageBox("加载图像成功");
m_picture->get_Width(&m_width);
AfxMessageBox("获取宽度成功");
m_picture->get_Height(&m_height);

中间加消息框是为了判断在哪里出错了。最后出现“加载图像成功”后就出错了。所以我觉得是获取宽度哪里就不对。
另外,同样的程序在打开jpg格式的小图片的时候是成功的,上面我用来打开一张大图片就失败了。感觉可能是数据长度的问题,但又不知道怎么解决,求助。
展开
 我来答
归悦欣cf
2015-12-14 · TA获得超过1444个赞
知道大有可为答主
回答量:4250
采纳率:59%
帮助的人:1397万
展开全部
这样添加消息框是不好查出错误的,在每一步获取值的时候都需要做判断,这个值是否获取正确。出现这样的错误最大可能是m_picture这个指针获取有误。
微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式