急,请教一问题,关于调用IStream中 Write函数报错

gaosonglove 2010-11-02 10:06:42
现在遇到了一个很郁闷的问题,找了一天,没找到原因所在。实在是万不得已,才来麻烦大家。
我写了一函数,实现的是类似于QQ的单聊窗口,绘制QQ秀。在每次创建聊天窗口时,调用此函数,绘制用户头像。当创建一个聊天窗口时,调用此函数没什么问题,但是创建多个聊天窗口,调用此函数有时候问题就出来了,strPhotoByte明明是有数据,但是在调用pStream->Wirte后,报错,提示内存异常。
最后一次运行SetBytePhto函数,TRACE显示相关参数内容:
SetBytePhoto 内存地址0B5F7E10 塒NG size 14287
但是运行到pStream->Write位置时,就报错,提示: 0x77c172e3 处未处理的异常: 0xC0000005: 读取位置 0x0b5fb000 时发生访问冲突。然后查一下strPhotoByte内存地址,却不再是0B5F7E10,而是0xffffffff,size大小却不再是14287,而是433256。
究竟是什么原因造成这样的错误?请教高手解答,谢谢。
void CStaticImage::SetBytePhoto(BYTE* strPhotoByte,int size)
{
if(strPhotoByte == NULL || size < 1)
return;
Create(); //创建对话框
HGLOBAL hMem = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_NODISCARD,size);
IStream *pStream;
HRESULT hr = CreateStreamOnHGlobal(hMem, TRUE, &pStream);
if(FAILED(hr))
return;
TRACE("SetBytePhoto 内存地址%p %s %d\n",strPhotoByte,strPhotoByte,size);
hr = pStream->Write(strPhotoByte,size, NULL); //********报错位置
if(FAILED(hr))
return;
delete m_img;
m_img=NULL;
m_img =new Image(pStream,TRUE);
Invalidate();
}
...全文
100 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaosonglove 2010-11-03
  • 打赏
  • 举报
回复
没人知道吗?自己顶
gaosonglove 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 iey000 的回复:]
友情帮顶~~~
[/Quote]
谢谢

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧