COM インターフェイスのエントリ ポイント
COM インターフェイスのメンバー関数の場合、エクスポートされたインターフェイスのメソッドを呼び出すときのグローバル状態を METHOD_PROLOGUE マクロで管理します。
通常、CCmdTarget 派生オブジェクトで実装したインターフェイスのメンバー関数では、このマクロを使用して、pThis ポインターを自動的に初期化しています。 次に例を示します
STDMETHODIMP_(ULONG) CMySink::XSinky::AddRef()
{
METHOD_PROLOGUE(CMySink, Sinky);
return pThis->InternalAddRef();
}
詳細については、「テクニカル ノート 38: MFC/OLE IUnknown の実装」の「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 は、コンテナー オブジェクトのメンバー変数と見なされます。 m_pModuleState は基本クラス CCmdTarget に実装されているため、このオブジェクトのインスタンスが作成されると、COleObjectFactory によって該当する値に初期化されます。