Re: aggregation and atl problem?
You are only exposing IBaseOverlay from the outer object. QI
for IShellIconOverlayIdentifier should return E_NOINTERFACE.
--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: agnickolov@mvps.org
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
"GAK" <usfinecats@nospam.sbcglobal.net> wrote in message
news:%23jzL05PnIHA.3940@TK2MSFTNGP05.phx.gbl...
I am having a bit of a problem with aggregating 2 atl classes CBaseOverlay
is the inner, COverlay0 is the Outer.
Everything seems to hook up ok, I can watch the creation of both classes
but when the client tries to find one of the interfaces implemented by the
inner, it fails.
class ATL_NO_VTABLE CBaseOverlay :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CBaseOverlay, &CLSID_BaseOverlay>,
public IBaseOverlay,
public IShellIconOverlayIdentifier {
....
BEGIN_COM_MAP(CBaseOverlay)
COM_INTERFACE_ENTRY(IBaseOverlay)
COM_INTERFACE_ENTRY(IShellIconOverlayIdentifier)
END_COM_MAP()
}
for the outer
class ATL_NO_VTABLE COverlay0 :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<COverlay0, &CLSID_Overlay0>,
public IOverlay0
{
....
BEGIN_COM_MAP(COverlay0)
COM_INTERFACE_ENTRY(IOverlay0)
COM_INTERFACE_ENTRY_AGGREGATE (IID_IBaseOverlay, ptrUnk)
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
DECLARE_GET_CONTROLLING_UNKNOWN()
IUnknown* ptrUnk;
HRESULT FinalConstruct()
{
HRESULT Status = CoCreateInstance(CLSID_BaseOverlay,
GetControllingUnknown(),CLSCTX_ALL, IID_IUnknown, (void**)&ptrUnk);
IBaseOverlay* pBO;
ptrUnk->QueryInterface(IID_IBaseOverlay, (void**)&pBO);
((CBaseOverlay*)pBO)->IconIndex = 0;
pBO->Release();
return Status;
}
void FinalRelease()
{
ptrUnk->Release();
}
....
}
Any ideas what I'm missing?
--
Gak -
Finecats