Punkty wejścia interfejsu COM
W przypadku funkcji członkowskich interfejsu COM użyj makra METHOD_PROLOGUE
, aby zachować prawidłowy stan globalny podczas wywoływania metod wyeksportowanego interfejsu.
Zazwyczaj funkcje składowe interfejsów implementowanych przez CCmdTarget
obiekty pochodne używają już tego makra do automatycznego inicjowania pThis
wskaźnika. Przykład:
STDMETHODIMP_(ULONG) CMySink::XSinky::AddRef()
{
METHOD_PROLOGUE(CMySink, Sinky);
return pThis->InternalAddRef();
}
Aby uzyskać dodatkowe informacje, zobacz Technical Note 38 on MFC/OLE implementation (Uwaga techniczna 38 dotycząca implementacji MFC/OLE IUnknown
).
Makro METHOD_PROLOGUE
jest definiowane jako:
#define METHOD_PROLOGUE(theClass, localClass) \
theClass* pThis = \
((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
AFX_MANAGE_STATE(pThis->m_pModuleState) \
Część makra, której dotyczy zarządzanie stanem globalnym, to:
AFX_MANAGE_STATE( pThis->m_pModuleState )
W tym wyrażeniu przyjmuje się, że m_pModuleState jest zmienną składową obiektu zawierającego. Jest implementowany przez klasę CCmdTarget
bazową i jest inicjowany do odpowiedniej wartości przez COleObjectFactory
, gdy obiekt jest tworzone wystąpienie.