Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#ifndef APITESTS_UNKNOWNBASE_H#define APITESTS_UNKNOWNBASE_H
template<typename Interface>class CUnknownBase : public Interface{ LONG m_lRef; bool m_AutoDelete;protected: virtual const QITAB* GetQITab() = 0;public:
CUnknownBase(bool autoDelete = true, LONG initialRef = 0) : m_lRef(initialRef), m_AutoDelete(autoDelete) { }
ULONG STDMETHODCALLTYPE AddRef () { return InterlockedIncrement( &m_lRef ); }
ULONG STDMETHODCALLTYPE Release() { long newref = InterlockedDecrement( &m_lRef ); if (m_AutoDelete && newref<=0) { delete this; } return newref; }
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv) { return QISearch(this, GetQITab(), riid, ppv); }
virtual ~CUnknownBase() {}
LONG GetRef() const { return m_lRef; }};
#endif // APITESTS_UNKNOWNBASE_H