temp&latelt, classeThreadModel >
Classe CComObjectRootEx: CComObjectRootBase pública
Parâmetros
ThreadModel
A classe cujos métodos implementam o modelo de segmentação desejado. Explicitamente você pode escolher o modelo de threading definindo ThreadModel CComSingleThreadModel CComMultiThreadModele CComMultiThreadModelNoCS. Você pode aceitar o modelo de thread do servidor padrão por configuração ThreadModel CComObjectThreadModel ou CComGlobalsThreadModel.
CComObjectRootEx lida com gerenciamento de contagem de referência de objeto para objetos nonaggregated e agregados. Ele contém a contagem de referência de objeto se o objeto não está sendo agregado e contém o ponteiro para o desconhecido externo se o objeto está sendo agregado. Para objetos agregados, métodos de CComObjectRootEx podem ser usados para tratar a falha do objeto interno para construir e proteger o objeto externo de exclusão quando interfaces internas são liberados ou o objeto interno é excluído.
Uma classe que implementa um servidor COM deve herdar do CComObjectRootEx ou CComObjectRoot.
Se sua definição de classe especifica a macro DECLARE_POLY_AGGREGATABLE , ATL cria uma instância da CComPolyObjectlt;CYourClass > quando IClassFactory:: CreateInstance é chamado. Durante a criação, o valor do desconhecido externo é marcado. Se for NULL, IUnknown é implementado para um objeto nonaggregated. Se o desconhecido externo não for NULL, IUnknown é implementado para um objeto agregado.
Se sua classe não especificar a macro DECLARE_POLY_AGGREGATABLE , ATL cria uma instância da CComObjectlt;CYourClass > para objetos agregados ou uma instância de CComAggObject <CYourClass> para objetos nonaggregated.
A vantagem de usar CComPolyObject é que você evite ter ambos CComAggObject e CComObject no seu módulo para lidar com os cAmbosos agregados e nonaggregated. Um objeto simples CComPolyObject lida com ambos os casos. Portanto, somente um copiar da vtable e uma cópia das funções existem em seu módulo. Se seu vtable for grande, isso pode diminuir substancialmente o tamanho do módulo. No entanto, se seu vtable for pequeno, usar CComPolyObject pode resultar em um tamanho ligeiramente maior do módulo porque ele não é otimizado para um objeto agregado ou nonaggregated, como CComAggObject e CComObject.
A macro DECLARE_POLY_AGGREGATABLE é adicionada automaticamente ao seu definição de classe, o Assistente de objeto ATL quando você cria um controle total ou controle do Internet Explorer.
Se o objeto é agregado, IUnknown é implementada por CComAggObject ou CComPolyObject. Essas classes delegate chamadas Falha de QueryInterface, AddRefe lançamento de CComObjectRootEx OuterQueryInterface, OuterAddRefe OuterRelease para encaminhar para o externo desconhecido. Normalmente, você substituir CComObjectRootEx::FinalConstruct em sua classe para criar quaisquer objetos agregados e substituir CComObjectRootEx::FinalRelease para livre quaisquer objetos agregados.
Se o objeto não é agregado, IUnknown é implementado por CComObject ou CComPolyObject. Nesse caso, chamadas para QueryInterface, AddRefe versão são delegadas a CComObjectRootEx InternalQueryInterface, InternalAddRefe InternalRelease para executar as operações reais.
# include lt;atlcom.h>
Co&nsulte tambémnbsp;CComAggObject, CComObject, CComPolyObject