Implementando uma interface dupla
Você pode implementar uma interface dupla usando a classe IDispatchImpl, que fornece uma implementação padrão dos métodos IDispatch
em uma interface dupla. Para obter mais informações, confira Como implementar a interface IDispatch.
Para usar esta classe:
Defina sua interface dupla em uma biblioteca de tipos.
Derive sua classe de uma especialização de
IDispatchImpl
(passe informações sobre a interface e a biblioteca de tipos como os argumentos de modelo).Adicione uma ou mais entradas ao mapa COM para expor a interface dupla por meio de
QueryInterface
.Implemente a parte vtable da interface na sua classe.
Verifique se a biblioteca de tipos que contém a definição de interface está disponível para seus objetos no runtime.
Assistente de objeto simples da ATL
Se você quiser criar uma interface e uma classe para implementá-la, poderá usar a caixa de diálogo Adicionar Classe da ATL e, em seguida, o Assistente de Objeto Simples da ATL.
Assistente de Implementação de Interface
Se você já tiver uma interface, poderá usar o Assistente para Implementar Interface para adicionar as implementações necessárias de classe base, entradas de mapa COM e método skeleton a uma classe existente.
Observação
Talvez seja necessário ajustar a classe base gerada para que os números de versão principal e secundária da biblioteca de tipos sejam passados como argumentos de modelo para sua classe base IDispatchImpl
. O Assistente para Implementar Interface não verifica o número de versão da biblioteca de tipos para você.
Implementando IDispatch
É possível usar uma classe base IDispatchImpl
para fornecer uma implementação de uma dispinterface apenas especificando a entrada apropriada no mapa COM (usando a macro COM_INTERFACE_ENTRY2 ou COM_INTERFACE_ENTRY_IID), desde que você tenha uma biblioteca de tipos que descreva uma interface dupla correspondente. É bastante comum implementar a interface IDispatch
dessa forma, por exemplo. O Assistente de Objeto Simples da ATL e o Assistente de Implementação de Interface pressupõem que você pretende implementar IDispatch
dessa forma; então, eles adicionarão a entrada apropriada ao mapa.
Observação
A ATL oferece as classes IDispEventImpl e IDispEventSimpleImpl para ajudar a implementar dispinterfaces sem exigir uma biblioteca de tipos que contenha a definição de uma interface dupla compatível.