调用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();//关闭打开的文件
...全文
130 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
MoXiaoRab 2011-06-19
  • 打赏
  • 举报
回复
接分
低头路过 2011-06-18
  • 打赏
  • 举报
回复
BS我吧。。。返回值是0代表是ID_OK,应该用HRESULT做返回值的,误会了。。。
低头路过 2011-06-18
  • 打赏
  • 举报
回复
召唤各位大神和大婶。。。
低头路过 2011-06-18
  • 打赏
  • 举报
回复
by the way,CFile* httpFile = (CFile*)session.OpenURL(url);里面的url是一个网址,已赋值。

3,245

社区成员

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

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