aggregation and atl problem?
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