次の方法で共有


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

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によって適切な値に初期化されます。

こちらも参照ください

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