1 #ifndef APITESTS_UNKNOWNBASE_H
2 #define APITESTS_UNKNOWNBASE_H
4 template<typename Interface
>
5 class CUnknownBase
: public Interface
10 virtual const QITAB
* GetQITab() = 0;
13 CUnknownBase(bool autoDelete
= true, LONG initialRef
= 0)
15 m_AutoDelete(autoDelete
)
19 ULONG STDMETHODCALLTYPE
AddRef ()
21 return InterlockedIncrement( &m_lRef
);
24 ULONG STDMETHODCALLTYPE
Release()
26 long newref
= InterlockedDecrement( &m_lRef
);
27 if (m_AutoDelete
&& newref
<=0)
34 HRESULT STDMETHODCALLTYPE
QueryInterface(REFIID riid
, void** ppv
)
36 return QISearch(this, GetQITab(), riid
, ppv
);
39 virtual ~CUnknownBase() {}
47 #endif // APITESTS_UNKNOWNBASE_H