CComPtr<IPicture>m_spIPicture;

HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRsrc = ::FindResource(hInst,
MAKEINTRESOURCE(IDB_BITMAP2),
RT_BITMAP); // type
if (!hRsrc)
return ; // load resource into memory
DWORD len = SizeofResource(hInst, hRsrc);
BYTE* lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);
if (!lpRsrc)
return ; // create memory file and load it
CFile file;
file.Open("c:\\tmp.bmp", CFile::modeRead|CFile::shareDenyWrite);
CArchive ar(&file, CArchive::load | CArchive::bNoFlushOnDelete);
CArchiveStream arcstream(&ar);
IStream * is;
is = (IStream *)&arcstream;
void * pvoid;
pvoid= malloc(100);
//is->Read(pvoid,100,NULL);
HRESULT hr = OleLoadPicture((IStream *)&arcstream, len, FALSE,
IID_IPicture, (void**)&m_spIPicture);
DWORD re = GetLastError();
ASSERT(SUCCEEDED(hr) && m_spIPicture);
//BOOL bRet = Load(file);
FreeResource(hRsrc);
GlobalFree(lpRsrc);这是源 代码编译成功后 在执行到oleloadpicture之后 返回总是失败 
但是我有个网上下的例程 却能成功,不知道是为什么~~
谁给指点指点 用com接口有什么先决条件
当然 我的头文件是有的
#include <afxpriv2.h>
#include <atlbase.h>