Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+----------------------------------------------------------------------------
// File: basecom.hxx
//
// Synopsis:
//
//-----------------------------------------------------------------------------
#ifndef _BASECOM_HXX
#define _BASECOM_HXX
class CVoid; class CUnknown; class CComponent;
// Types ----------------------------------------------------------------------
#define DEFINE_IUNKNOWN_METHODS \
STDMETHOD(QueryInterface)(REFIID riid, void ** ppvObj) \ { return PublicQueryInterface(riid, ppvObj); } \ STDMETHOD_(ULONG, AddRef)() \ { return PublicAddRef(); } \ STDMETHOD_(ULONG, Release)() \ { return PublicRelease(); }
#define OWNING_CLASS(parent, member) CONTAINING_RECORD(this, parent, member)
// Prototypes -----------------------------------------------------------------
template <class TYPE> TYPE * SAddRef(TYPE * pUnk) { if (pUnk) { pUnk->AddRef(); } return pUnk; } void SClear(IUnknown ** ppUnk); void SRelease(IUnknown * pUnk);
//+----------------------------------------------------------------------------
// Class: CVoid
//
// Synopsis:
//
//-----------------------------------------------------------------------------
class CVoid { public: };
//+----------------------------------------------------------------------------
// Class: CComponent
//
// Synopsis:
//
//-----------------------------------------------------------------------------
class CComponent : public CVoid { // Private IUnknown
class CUnknown : public IUnknown { public: STDMETHOD(QueryInterface)(REFIID riid, void ** ppvObj); STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, Release)(); };
friend class CUnknown;
public: CComponent(IUnknown * pUnkOuter = NULL) { _cRefs = 1; _pUnkOuter = (pUnkOuter ? pUnkOuter : &_Unk); IncrementThreadUsage(); } virtual ~CComponent() { DecrementThreadUsage(); }
// IUnknown helpers
STDMETHOD(PublicQueryInterface)(REFIID riid, void ** ppvObj); STDMETHOD_(ULONG, PublicAddRef)(); STDMETHOD_(ULONG, PublicRelease)();
IUnknown * PrivateUnknown() { return &_Unk; }
protected: ULONG _cRefs; IUnknown * _pUnkOuter; CUnknown _Unk;
// Private QueryInterface (override to provide additional interfaces)
virtual HRESULT PrivateQueryInterface(REFIID riid, void ** ppvObj); };
#endif // _BASECOM_HXX
|