COM インターフェイスのエントリ ポイント
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
によって適切な値に初期化されます。