急,请教一问题,关于调用IStream中 Write函数报错
现在遇到了一个很郁闷的问题,找了一天,没找到原因所在。实在是万不得已,才来麻烦大家。
我写了一函数,实现的是类似于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();
}