6 #ifndef _INC_cIUnkAgg_H
7 #define _INC_cIUnkAgg_H
16 template<
class TYPE = IUnknown>
29 : m_pIAggOuter(pIAggOuter)
31 ASSERT(pIAggOuter !=
nullptr);
39 if (ppv ==
nullptr || m_pIAggOuter ==
nullptr)
44 return m_pIAggOuter->QueryInterface(riid, ppv);
48 return m_pIAggOuter->AddRef();
52 return m_pIAggOuter->Release();
62 :
cIUnkAggBase((pIAggOuter == nullptr) ? this : pIAggOuter)
68 if (m_pIAggOuter ==
this)
71 return (ULONG) get_RefCount();
73 return m_pIAggOuter->AddRef();
77 if (m_pIAggOuter ==
this)
80 return (ULONG) get_RefCount();
82 return m_pIAggOuter->Release();
90 if (m_pIAggOuter ==
nullptr)
95 if (m_pIAggOuter ==
this)
103 return E_NOINTERFACE;
105 return m_pIAggOuter->QueryInterface(riid, ppv);
#define TYPE
Definition: StrT.cpp:38
#define DECLSPEC_NOVTABLE
Definition: SysTypes.h:322
INT32 HRESULT
_WIN32 style error codes. INT32
Definition: SysTypes.h:465
#define ASSERT(exp)
Definition: cDebugAssert.h:87
Definition: cIUnkAgg.h:18
ULONG Release(void)
Definition: cIUnkAgg.h:50
HRESULT QueryInterface(const IID &riid, void **ppv)
Definition: cIUnkAgg.h:37
cIUnkAggBase(TYPE *pIAggOuter)
Definition: cIUnkAgg.h:28
TYPE * m_pIAggOuter
the outer object interface.
Definition: cIUnkAgg.h:25
virtual ~cIUnkAggBase()
Definition: cIUnkAgg.h:33
ULONG AddRef(void)
Definition: cIUnkAgg.h:46
Definition: cIUnkAgg.h:57
STDMETHODIMP_(ULONG) Release(void) override
Definition: cIUnkAgg.h:75
STDMETHODIMP_(ULONG) AddRef(void) override
Definition: cIUnkAgg.h:66
cIUnkAgg(IUnknown *pIAggOuter)
Definition: cIUnkAgg.h:61
STDMETHODIMP QueryInterface(const IID &riid, void **ppv) override
Definition: cIUnkAgg.h:84
Definition: IUnknown.h:68
< The main namespace for all Core functions.
Definition: GrayCore.cpp:14
Definition: IUnknown.h:34