Files
Slnkdwf/SlnkDWFCom/comobjectembed.h
Jos Groot Lipman 80d0142c23 SLNKDWF 2.00
svn path=/Slnkdwf/trunk/; revision=12481
2007-08-01 13:42:28 +00:00

51 lines
1.3 KiB
C++

#ifndef __COMOBJECTEMBED_H_
#define __COMOBJECTEMBED_H_
template <class Base> //Base must be derived from CComObjectRoot
class CComObjectEmbed : public Base
{
public:
typedef Base _BaseClass;
CComObjectEmbed() {m_pOuterUnknown = NULL;}
CComObjectEmbed(void* pv) {m_pOuterUnknown = (IUnknown*)pv;}
void SetOuterUnknown(IUnknown *punkContainer) {m_pOuterUnknown = punkContainer;}
#ifdef xx_ATL_DEBUG_INTERFACES
~CComObjectEmbed()
{
_Module.DeleteNonAddRefThunk(_GetRawUnknown());
_Module.DeleteNonAddRefThunk(m_pOuterUnknown);
}
#endif
STDMETHOD_(ULONG, AddRef)() {return OuterAddRef();}
STDMETHOD_(ULONG, Release)() {return OuterRelease();}
STDMETHOD(QueryInterface)(REFIID iid, void ** ppvObject)
{
return _InternalQueryInterface(iid, ppvObject);
}
template <class Q>
HRESULT STDMETHODCALLTYPE QueryInterface(Q** pp)
{
return QueryInterface(__uuidof(Q), (void**)pp);
}
//GetControllingUnknown may be virtual if the Base class has declared
//DECLARE_GET_CONTROLLING_UNKNOWN()
IUnknown* GetControllingUnknown()
{
#ifdef xx_ATL_DEBUG_INTERFACES
IUnknown* p;
_Module.AddNonAddRefThunk(m_pOuterUnknown, _T("CComObjectEmbed"), &p);
return p;
#else
return m_pOuterUnknown;
#endif
}
};
#endif /* !__COMOBJECTEMBED_H_ */