COM インターフェイスのエントリ ポイント

更新 : 2007 年 11 月

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 によって該当する値に初期化されます。

参照

概念

MFC モジュールの状態データの管理