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.

Diagram of the classes and interfaces used to define an A T L object.

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:

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.

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.

Confira também

Conceitos