Pontos de entrada da interface COM
Para funções membro de uma interface COM, use a macro METHOD_PROLOGUE
para manter o estado global adequado ao chamar métodos de uma interface exportada.
Normalmente, as funções membro de interfaces implementadas por objetos derivados de CCmdTarget
já usam essa macro para fornecer inicialização automática do ponteiro pThis
. Por exemplo:
STDMETHODIMP_(ULONG) CMySink::XSinky::AddRef()
{
METHOD_PROLOGUE(CMySink, Sinky);
return pThis->InternalAddRef();
}
Para obter informações adicionais, confira a Nota Técnica 38 sobre a implementação de IUnknown
no MFC/OLE.
A macro METHOD_PROLOGUE
é definida como:
#define METHOD_PROLOGUE(theClass, localClass) \
theClass* pThis = \
((theClass*)((BYTE*)this - offsetof(theClass, m_x##localClass))); \
AFX_MANAGE_STATE(pThis->m_pModuleState) \
A parte da macro relacionada ao gerenciamento do estado global é:
AFX_MANAGE_STATE( pThis->m_pModuleState )
Nessa expressão, m_pModuleState é considerado uma variável membro do objeto recipiente. Ele é implementado pela classe base CCmdTarget
e é inicializado para o valor apropriado por COleObjectFactory
, quando o objeto é instanciado.