急,请教一问题,关于调用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();
}
我写了一函数,实现的是类似于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();
}
...全文
相关推荐
write函数的详细用法
### write函数的详细用法在计算机编程领域中,尤其是对于C语言而言,`write`函数是进行文件I/O操作的基础之一。
GDI+ 函数封装 IStream.rar
在这个名为"IStream.rar"的压缩包中,我们关注的是如何使用VB6(Visual Basic 6)和GDI+来实现内存中的JPEG图像的压缩和解压缩,并将这些图像数据保存为Istream对象或Byte
linux下系统调用write过程
Linux 下系统调用 write 过程详解在 Linux 下,我们在使用设备的时候,都会用到 write 这个函数,通过这个函数我们可以象使 用文件那样向设备传送数据。
用IStream读取保存图像
= NULL){ // medium.pstg即为IStorage接口,可以在此创建IStream并保存图像数据 IStream* pStream; hr = medium.pstg->CreateStream
LWIP中tcp_write函数的理解
首先,tcp_write函数并不直接发送数据,而是将数据添加到TCP控制块的缓冲队列中。当应用程序调用tcp_write时,LWIP会将数据复制到一个内部缓冲区,并返回一个状态码给调用者。


