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