怎么在MFC中使用一个自定义的ID来加载位图资源

如何在MFC中使用一个自定义的ID来加载位图资源
C/C++ code

//定义
CComQIPtr<IPicture>m_spIPicture;


//加载ID资源函数实现

HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hInst,
      MAKEINTRESOURCE(nIDRes),
      _T("IMAGE"));//在这里自定义了一个资源类型,名字是IMAGE
if(hRsrc == 0)
{
       hRsrc = ::FindResource(hInst = AfxGetInstanceHandle() , 
                 MAKEINTRESOURCE(nIDRes) ,
                 _T("IMAGE")) ;
}
if (!hRsrc)
      return FALSE;

DWORD len = SizeofResource(hInst, hRsrc);
   HGLOBAL hGl = LoadResource(hInst, hRsrc);
   BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);

if (!lpRsrc)
      return FALSE;

CMemFile file(lpRsrc, len);
CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);
CArchiveStream arcstream(&ar);
if(m_spIPicture)
       m_spIPicture.Release();
HRESULT hr = OleLoadPicture(pstm, 0, FALSE,
      IID_IPicture, (void**)&m_spIPicture);
   FreeResource(hRsrc);



到OleLoadPicture()函数的时候就会出现错误,返回值hr是一个负数-2146827807,而m_spIPicture返回的地址是{0x00000000},求解.

------解决方案--------------------
用GDI+,Gdiplus::Image::FromSteam

可以试试这个函数:
BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, Gdiplus::Image * &pImg)
{
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(nID),sTR); // type
if (!hRsrc)
return FALSE;
// load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return FALSE;
// Allocate global memory on which to create stream
HGLOBAL m_hMem = GlobalAlloc(GMEM_FIXED, len);
BYTE* pmem = (BYTE*)GlobalLock(m_hMem);
memcpy(pmem,lpRsrc,len);
IStream* pstm;
CreateStreamOnHGlobal(m_hMem,FALSE,&pstm);
// load from stream
pImg=Gdiplus::Image::FromStream(pstm);
// free/release stuff
GlobalUnlock(m_hMem);
pstm->Release();
FreeResource(lpRsrc);
return TRUE;
}