对于 COM 接口的成员函数,则调用导出的接口的方法时,请使用 METHOD_PROLOGUE 宏保持适当的全局状态。
通常,实现的 CCmdTarget接口的成员函数 - 派生的对象中使用此宏提供 pThis 指针的自动初始化。 例如:
STDMETHODIMP_(ULONG) CMySink::XSinky::AddRef()
{
METHOD_PROLOGUE(CMySink, Sinky);
return pThis->InternalAddRef();
}
有关其他信息,请参见位于 MFC/OLE IUnknown 实现的 技术说明 38。
METHOD_PROLOGUE 宏定义如下:
#define METHOD_PROLOGUE(theClass, localClass) \
theClass* pThis = \
((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
AFX_MANAGE_STATE(pThis->m_pModuleState) \
与管理全局状态相关的宏进行部分是:
AFX_MANAGE_STATE( pThis->m_pModuleState )
在表达式中,m_pModuleState 假定是包含对象的成员变量。 当对象实例化时,它由 CCmdTarget 基类实现并初始化为适当的值的 COleObjectFactory。