本帖最后由 初学C 于 2017-7-19 10:46 编辑
[mw_shl_code=c,true]int PutImage(HDC DC, char *ImagePath,int w,int h)
{
HANDLE FHD = 0;
unsigned long dwFileSize = 0;
HGLOBAL ImageMemary = 0;
LPVOID MemaryLock = 0;
unsigned long ActualSize = 0;
IPicture *ppic = 0;
IStream *pstm = 0;
OLE_XSIZE_HIMETRIC hmWidth = 0;
OLE_YSIZE_HIMETRIC hmHeight = 0;
GUID const IID_IPicture2 = {0};
DWORD res = 0;
FHD = CreateFile (ImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if(FHD == 0)
{
return GetLastError();
}
dwFileSize = GetFileSize ( FHD, NULL );
if(dwFileSize == 0)
{
res = GetLastError();
CloseHandle ( FHD );
return res;
}
ImageMemary = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
if(ImageMemary == 0)
{
res = GetLastError();
CloseHandle ( FHD );
return res;
}
MemaryLock = GlobalLock ( ImageMemary );
if(MemaryLock == 0)
{
res = GetLastError();
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return res;
}
if(0 == ReadFile ( FHD, MemaryLock, dwFileSize, &ActualSize, NULL) )
{
res = GetLastError();
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return res;
}
if(S_OK != CreateStreamOnHGlobal (ImageMemary, 0, &pstm) )
{
res = GetLastError();
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return res;
}
res = OleLoadPicture(pstm,dwFileSize,1,&IID_IPicture2,(LPVOID*)&ppic);//一直在这一句出错
if(res == E_POINTER)
{
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return E_POINTER;
}
if(res == E_NOINTERFACE)
{
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return E_NOINTERFACE;
}
if(ppic == 0)
{
res = GetLastError();
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return res;
}
ppic->lpVtbl->get_Width(ppic, &hmWidth);
ppic->lpVtbl->get_Height(ppic, &hmHeight);
ppic->lpVtbl->Render(ppic,DC,0,0,w,h,0,hmHeight,hmWidth,-hmHeight,NULL);
GlobalUnlock ( ImageMemary );
CloseHandle ( FHD );
GlobalFree(ImageMemary);
return 1;
} [/mw_shl_code] |