| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- /******************************************************************************
- |* THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
- |* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
- |* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
- |* PARTICULAR PURPOSE.
- |*
- |* Copyright 1995-2005 Nero AG and its licensors. All Rights Reserved.
- |*-----------------------------------------------------------------------------
- |* NeroSDK / NeroVisionAPI
- |*
- |* PROGRAM: BaseObj.h
- |*
- |* PURPOSE: Test application for the NeroVision API: base class for COM objects
- ******************************************************************************/
- #ifndef BASEOBJ_H
- #define BASEOBJ_H
- HRESULT GetInterface(LPUNKNOWN pUnk, void **ppv);
- class BaseObj: public IUnknown
- {
- protected:
- BaseObj(): m_refCount(1) {}
- virtual ~BaseObj() {}
- STDMETHODIMP QueryInterface(REFIID riid, void** ppv)
- {
- if (riid == IID_IUnknown)
- return GetInterface(static_cast<IUnknown*>(this), ppv);
- else
- return InternalQueryInterface(riid, ppv);
- }
- STDMETHODIMP_(ULONG) AddRef() { return InterlockedIncrement((LONG*)&m_refCount); }
- STDMETHODIMP_(ULONG) Release() { ULONG r = InterlockedDecrement((LONG*)&m_refCount); if (r) return r; delete this; return 0; }
- virtual HRESULT InternalQueryInterface(REFIID riid, void** ppv) { return E_NOINTERFACE; }
- ULONG m_refCount;
- };
- #define IMPL_IUNKNOWN \
- STDMETHODIMP QueryInterface(REFIID riid, void** ppv) { return BaseObj::QueryInterface(riid, ppv); } \
- STDMETHODIMP_(ULONG) AddRef() { return BaseObj::AddRef(); } \
- STDMETHODIMP_(ULONG) Release() { return BaseObj::Release(); }
- #define IMPL_INTERFACE(IFNAME) \
- HRESULT InternalQueryInterface(REFIID riid, void** ppv) \
- { \
- if (riid == __uuidof(IFNAME)) \
- return ::GetInterface(static_cast<IFNAME*>(this), ppv); \
- else \
- return BaseObj::InternalQueryInterface(riid, ppv); \
- }
- #endif
|