COM Interface Entry Points

HomeOverviewHow Do ISampleTutorial

For member functions of a COM interface, use the METHOD_PROLOGUE macro to maintain the proper global state when calling methods of an exported interface.

Typically, member functions of interfaces implemented by CCmdTarget-derived objects already use this macro to provide automatic initialization of the pThis pointer. For example:

// Inner IUnknown implementation (for aggregation)

STDMETHODIMP_(ULONG) CInnerUnknown::AddRef()
{
   METHOD_PROLOGUE_(CCmdTarget, InnerUnknown)
   return pThis->InternalAddRef();
}

For additional information, see Technical Note 38, "MFC/OLE IUnknown Implementation."

The METHOD_PROLOGUE macro is defined as:

#define METHOD_PROLOGUE(theClass, localClass) \
   theClass* pThis = \
      ((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
   AFX_MANAGE_STATE(pThis->m_pModuleState) \

The portion of the macro concerned with managing the global state is:

AFX_MANAGE_STATE( pThis->m_pModuleState )

In this expression, m_pModuleState is assumed to be a member variable of the containing object. It is implemented by the CCmdTarget base class, and is initialized to the appropriate value by COleObjectFactory, when the object is instantiated.