●●●如果用COM传递一个图标?●●●
hicon,如果通过com的方法传递给调用者?
推荐阅读
save icon into istream*, then you can get its size
{
// todo: add extra validation here
//createstreamonhglobal
//ipicture::save
lpbyte lpbits=null;
long size=0;
hicon hicon=loadicon(afxgetinstancehandle(),makeintresource(idi_icon1));
pictdesc pdiconsrc;
pdiconsrc.cbsizeofstruct=sizeof(pictdesc);
pdiconsrc.icon.hicon=hicon;
pdiconsrc.pictype=pictype_icon;
ipicture* pipicture=null;
hresult hr;
idispatch* pdisp=null;
hr = olecreatepictureindirect(&pdiconsrc,
iid_idispatch,
true,
(void**)&pdisp);
if(succeeded(hr))
{
hr = pdisp->queryinterface(&pipicture);
if(succeeded(hr))
{
lpbits = (lpbyte) globalalloc(gmem_moveable|gmem_nodiscard, 64*1024);
istream* pstream;
createstreamonhglobal(lpbits,false,&pstream);
hr=pipicture->saveasfile(pstream,false,&size);
if(pstream)
pstream->release();
if(succeeded(hr)&&size>0)
{
//you can use
char* pchar=(char*)lpbits;
//icon is stored in pchar, length is size
//to create another hicon
//use oleloadpicture(pstream,...)
//ipicture::get_handle to get the icon handle
}
pipicture->release();
if(lpbits)
globalfree((hglobal)lpbits);
}
pdisp->release();
}
}


讨论区