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

gaosonglove 2010-11-02 09:51:25
现在遇到了一个很郁闷的问题,找了一天,没找到原因所在。实在是万不得已,才来麻烦大家。
我写了一函数,实现的是类似于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();
}
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaosonglove 2010-11-03
  • 打赏
  • 举报
回复
没人知道吗?自己顶
gaosonglove 2010-11-02
  • 打赏
  • 举报
回复
是我自己表达不清楚还是?
自己顶,急盼高手前来帮忙

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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