COM インターフェイスのメンバー関数の場合は、エクスポートされたインターフェイスのメソッドを呼び出すときに、 METHOD_PROLOGUE
マクロを使用して適切なグローバル状態を維持します。
通常、 CCmdTarget
派生オブジェクトによって実装されるインターフェイスのメンバー関数は、既にこのマクロを使用して、 pThis
ポインターの自動初期化を提供します。 例えば次が挙げられます。
STDMETHODIMP_(ULONG) CMySink::XSinky::AddRef()
{
METHOD_PROLOGUE(CMySink, Sinky);
return pThis->InternalAddRef();
}
詳細については、MFC/OLE 実装のIUnknown
を参照してください。
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
によって適切な値に初期化されます。