Macros COM_INTERFACE_ENTRY

Essas macros digite interfaces de um objeto em seu mapa de COM para que eles possam ser acessados por QueryInterface. A ordem das entradas de mapa COM é que as interfaces de ordem serão verificadas para uma correspondência IID durante Falha de QueryInterface.

Cada objeto que deseja expor suas interfaces através de QueryInterface deve ter seu próprio mapa COM. O mapa COM começa com a macro BEGIN_COM_MAP. Entradas de interface são adicionadas com uma ou mais das macros COM_INTERFACE_ENTRY , e o mapa é preenchido com a macro END_COM_MAP . Por exemplo:

BEGI&N_COM_MAP(CMyObject)
 nbsp;  COM_INTERFACE_ENTRY(IDispatch)
    COM_INTERFACE_ENTRY(IMyObject)
END_COM_MAP)

Consulte ATL COMMAP exemplo para exemplos usando os diferentes tipos de COM mapeiam macros de entrada de.

Observe que a primeira entrada no mapa de COM deve ser uma interface sobre o objeto que contém o mapa COM. Assim, você não pode iniciar suas COM entradas de mapa com COM_INTERFACE_ENTRY_CHAIN, que faz com que o mapa COM de um objeto diferente a ser pesquisado no ponto onde COM_INTERFACE_ENTRY_CHAIN (COtherObject) aparece no mapa de COM do objeto. Se você quiser pesquisar primeiro o mapa COM de outro objeto, adicionar uma entrada de interface de IUnknown para o seu mapa de COM, em seguida, encadear mapa de COM do outro objeto. Por exemplo:

BEGI&N_COM_MAP(CThisObject)
 nbsp; COM_INTERFACE_ENTRY(IUnknown)
   COM_INTERFACE_ENTRY_CHAIN
END_COM_MAP)

Cuidado nbsp; A partir da versão 3.0, ATL usa a palavra-chave compilador uuidof ( classe ) para obter o IID correspondente para uma determinada classe. Devido às alterações no macros COM_I&NTERFACE_ENTRY eficazes na versão 3.0, agora você simplesmente incluir o cabeçalho para a interface usar, em vez de também vincular a uma biblioteca que define as IIDs correspondentes para essa interface. Essa alteração pode causar problemas se o cabeçalho gerado anteriormente por uma versão mais antiga do MIDL, ou se ele foi codificado mão e não marcado apropriadamente. Se a declaração para a interface no cabeçalho não tiver sido marcada com um associado declspec ( uuid )e, em seguida, qualquer tentativa de usar a palavra-chave uuidof para essa interface irá falhar. Você pode reverter para as mais velhas macros COM_INTERFACE_ENTRY (ATL 2. x), definindo o _ATL_NO_UUIDOF em suas configurações de compilação para resolver qualquer problema com esse novo comportamento.

A seguir estão as macros de entrada disponíveis:

Mapa COM as Macros de entrada

COM_INTERFACE_ENTRY
COM_INTERFACE_ENTRY_IID
COM_INTERFACE_ENTRY2
COM_INTERFACE_ENTRY2_IID
COM_INTERFACE_ENTRY_FUNC
COM_INTERFACE_ENTRY_FUNC_BLIND
COM_INTERFACE_ENTRY_TEAR_OFF
COM_INTERFACE_ENTRY_CACHED_TEAR_OFF
COM_INTERFACE_ENTRY_AGGREGATE
COM_INTERFACE_ENTRY_AGGREGATE_BLIND
COM_INTERFACE_ENTRY_AUTOAGGREGATE
COM_INTERFACE_ENTRY_AUTOAGGREGATE_BLIND
COM_INTERFACE_ENTRY_CHAIN
COM_INTERFACE_ENTRY_BREAK
COM_INTERFACE_ENTRY_NOINTERFACE

ATL Macros e funções Global

Index