Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A ilustração a seguir mostra a relação entre as classes e interfaces 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 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 CComAggObject classe. A terceira opção é usar a CComPolyObject classe.
CComPolyObject Atua como um híbrido: pode funcionar como uma CComObject classe ou como uma CComAggObject classe, dependendo de como é criado pela primeira vez. Para obter mais informações sobre como usar a CComPolyObject classe, consulte Classe CComPolyObject.
Quando você usa 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 passar pelo 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 conhecer 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.
ATL implementa IUnknown em duas fases:
CComObject, CComAggObject ou CComPolyObject implementa os
IUnknownmétodos.CComObjectRoot ou CComObjectRootEx gerencia a contagem de referência e os ponteiros externos do
IUnknown.
Outros aspetos do seu objeto ATL COM são tratados por outras classes:
CComCoClass define a fábrica de classe padrão e o modelo de agregação do objeto.
IDispatchImpl fornece uma implementação padrão da
IDispatch Interfaceparte de qualquer interface dupla no objeto.ISupportErrorInfoImpl implementa a interface que garante que as
ISupportErrorInfoinformações de erro possam ser propagadas pela cadeia de chamadas corretamente.
Na presente seção
Implementando CComObjectRootEx
Mostrar exemplos de entradas de mapa COM para implementação do CComObjectRootEx.
Implementando CComObject, CComAggObject e CComPolyObject
Discute como as macros DECLARE_*_AGGREGATABLE afetam o uso de CComObject, CComAggObjecte CComPolyObject.
Suportando IDispatch e IErrorInfo
Lista as classes de implementação ATL a serem usadas para dar suporte às IDispatch interfaces e IErrorInfo .
Suporte IDispEventImpl
Discute as etapas para implementar um ponto de conexão para sua classe.
Alterando a fábrica de classe padrão e o modelo de agregação
Mostrar quais macros usar para alterar a fábrica de classes padrão e o modelo de agregaçã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 a Ative Template Library.