Princípios básicos de objetos COM da ATL
A ilustração a seguir ilustra a relação entre as classes e interfaces que são usadas para definir um objeto ATL COM.
Observação
Este diagrama mostra que CComObject
é derivado de CYourClass
enquanto CComAggObject
e CComPolyObject
incluem CYourClass
como uma variável de membro.
Há três maneiras de definir um objeto ATL COM. A opção padrão é usar a classe CComObject
, que é derivada de CYourClass
. A segunda opção é criar um objeto agregado usando a classe CComAggObject
. A terceira opção é usar a classe CComPolyObject
. CComPolyObject
atua como um híbrido: ele pode funcionar como uma classe CComObject
ou como uma classe, CComAggObject
dependendo de como ele é criado pela primeira vez. Para obter mais informações sobre como usar a classe CComPolyObject
, consulte CComPolyObject Class.
Ao usar ATL COM padrão, você usa dois objetos: um objeto externo e um objeto interno. Os clientes externos acessam a funcionalidade do objeto interno por meio das funções de wrapper definidas no objeto externo. O objeto externo é do tipo CComObject
.
Quando você usa um objeto agregado, o objeto externo não fornece wrappers para a funcionalidade do objeto interno. Em vez disso, o objeto externo fornece um ponteiro que é acessado diretamente por clientes externos. Nesse cenário, o objeto externo é do tipo CComAggObject
. O objeto interno é uma variável membro do objeto externo e é do tipo CYourClass
.
Como o cliente não precisa percorrer o objeto externo para interagir com o objeto interno, os objetos agregados geralmente são mais eficientes. Além disso, o objeto externo não precisa saber a funcionalidade do objeto agregado, dado que a interface do objeto agregado está diretamente disponível para o cliente. No entanto, nem todos os objetos podem ser agregados. Para que um objeto seja agregado, ele precisa ser projetado com a agregação em mente.
A ATL implementa IUnknown em duas fases:
CComObject, CComAggObject ou CComPolyObject implementa os métodos
IUnknown
.CComObjectRoot ou CComObjectRootEx gerencia a contagem de referências e ponteiros externos de
IUnknown
.
Outros aspectos do objeto ATL COM são tratados por outras classes:
CComCoClass define a fábrica de classes padrão e o modelo de agregação do objeto.
IDispatchImpl fornece uma implementação padrão da parte
IDispatch Interface
de qualquer interface dupla no objeto.ISupportErrorInfoImpl implementa a interface
ISupportErrorInfo
que garante que as informações de erro possam ser propagadas até a cadeia de chamadas corretamente.
Nesta seção
Implementando CComObjectRootEx
Mostrar entradas de mapa COM de exemplo para implementar CComObjectRootEx
.
Implementando CComObject, CComAggObject e CComPolyObject
Discute como as macros DECLARE_*_AGGREGATABLE afetam o uso de CComObject
, CComAggObject
e CComPolyObject
.
Suporte a IDispatch e IErrorInfo
Lista as classes de implementação da ATL a serem usadas para dar suporte às interfaces IDispatch
e IErrorInfo
.
Suporte a IDispEventImpl
Discute as etapas para implementar um ponto de conexão para sua classe.
Alterando a fábrica de classes padrão e o modelo de agregação
Mostre quais macros usar para alterar o modelo de agregação e fábrica de classe padrão.
Criando um objeto agregado
Lista as etapas para criar um objeto agregado.
Seções relacionadas
Criando um projeto ATL
Fornece informações sobre como criar um objeto ATL COM.
ATL
Fornece links para tópicos conceituais sobre como programar usando o Active Template Library.