Fundamentos de objetos COM de ATL
A ilustração a seguir descrevem a relação entre as classes e interfaces que são usadas para definir um objeto COM de ATL.
Observação |
---|
Este diagrama mostra CComObject que é derivado de CYourClass enquanto CComAggObject e CComPolyObject incluem CYourClass como um variável de membro. |
Existem três maneiras para definir um objeto COM de ATL.a opção padrão é usar a classe de CComObject que é derivada de CYourClass.a segunda opção é criar um objeto agregado usando a classe de CComAggObject .a terceira opção é usar a classe de CComPolyObject .CComPolyObject atua como um híbrido: pode funcionar como uma classe de CComObject ou como uma classe de CComAggObject , dependendo de como é projetado principalmente.Para obter mais informações sobre como usar a classe de CComPolyObject , consulte Classe de CComPolyObject.
Quando você usa o padrão ATL COM, você usa dois objetos: um objeto externo e um objeto interno.Os clientes externos acesso à funcionalidade interna de objeto com as funções do wrapper que são definidas no objeto externo.O objeto externo é do tipo CComObject.
Quando você usa um objeto agregado, o objeto externo não fornece os wrappers para a funcionalidade interna do objeto.Em vez de isso, o objeto externo fornece um ponteiro que é acessado diretamente por clientes externos.Em esse cenário, o objeto externo é do tipo CComAggObject.O objeto interno é um variável de membro objeto externo, e é do tipo CYourClass.
Porque o cliente não precisa passar pelo objeto externo interagir com o objeto interno, os objetos agregados são geralmente mais eficientes.Além de isso, o objeto externo não precisa saber a funcionalidade do objeto agregado, dado que a interface do objeto diretamente agregado está disponível para o cliente.Em o entanto, nem todos os objetos podem ser agregados.Para que um objeto seja, agregado precisam ser criado com agregação em mente.
ATL implementa IUnknown em dois estágios:
Implementa deCComObject, de CComAggObject, ou de CComPolyObject os métodos de IUnknown .
CComObjectRoot ou CComObjectRootEx gerenciam a contagem de referência e ponteiros fora de IUnknown.
Outros aspectos do seu objeto COM de ATL são tratados por outras classes:
CComCoClass define o modelo padrão de fábrica e de distribuição da classe do objeto.
IDispatchImpl fornece uma implementação padrão de parte de IDispatch Interface de todas as interfaces duais no objeto.
ISupportErrorInfoImpl implementa a interface de ISupportErrorInfo que garante que as informações de erro pode ser propagadas acima da cadeia de chamada corretamente.
Nesta seção
implementando CComObjectRootEx
Entradas do mapa da do exemplo de apresentação para implementar CComObjectRootEx.implementando CComObject, CComAggObject, e CComPolyObject
Discute como macros de DECLARE_*_AGGREGATABLE afetam o uso de CComObject, de CComAggObject, e de CComPolyObject.Suporte IDispatch e IErrorInfo
Lista as classes de implementação de ATL para usar o para oferecer suporte IDispatch e IErrorInfo interfaces.Suporte IDispEventImpl
Discute as etapas para implementar um ponto de conexão para a classe.Modificando o modelo padrão de fábrica e de distribuição de classe
Apresentação que macros a usar para alterar o factory e a agregação padrão da classe modelar.criando um objeto agregado
Lista as etapas para criar um objeto agregado.
Seções relacionadas
criando um projeto de ATL
Fornece informações sobre a criação de um objeto através de ATL.ATL
Fornece links para tópicos conceituais sobre como programar usando a biblioteca ativa do modelo.