This documentation is archived and is not being maintained.

COM Interface Entry Points 

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 on 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.

See Also

Show: