调用CreateStreamOnHGlobal返回值是0,求助,代码已贴。
低头路过 2011-06-18 09:22:43 代码如下:
HDC hDC_Temp = this->GetDC()->GetSafeHdc();
CInternetSession session (_T("QQEmailReg"));
CFile* httpFile = (CFile*)session.OpenURL(url);
DWORD dwFileSize,dwByteRead;
IStream *pStm = NULL;
IPicture *pPic;
if (httpFile!=INVALID_HANDLE_VALUE)
{
dwFileSize= httpFile->GetLength();//获取文件字节数
if (dwFileSize==0xFFFFFFFF)
return;
}
else
{
return;
}
//分配全局存储空间
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
LPVOID pvData = NULL;
if (hGlobal == NULL)
return;
if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
return;
// 把文件读入内存缓冲区
dwByteRead = httpFile->Read(pvData,dwFileSize);//此处的pvData读出来不知道干什么用,在内存中看,确乎pvData已经有值了。
GlobalUnlock(hGlobal);
BOOL bResult=CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);//此处返回值为0
if(FAILED(bResult))
return;
OLE_XSIZE_HIMETRIC hmWidth; //图片的真实宽度, 单位为英寸
OLE_YSIZE_HIMETRIC hmHeight; //图片的真实高度, 单位为英寸
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//转换hmWidth和hmHeight为pixels距离,1英寸=25.4毫米
int nWidth = MulDiv(hmWidth,GetDeviceCaps(hDC_Temp,LOGPIXELSX),2540);
int nHeight = MulDiv(hmHeight,GetDeviceCaps(hDC_Temp,LOGPIXELSY),2540);
//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(hDC_Temp,0,0,nWidth,nHeight,0,hmHeight,hmWidth,-hmHeight,NULL);
pPic->Release();
httpFile->Close();//关闭打开的文件