Principes de base des objets ATL COM
L’illustration suivante illustre la relation entre les classes et les interfaces utilisées pour définir un objet COM ATL.
Remarque
Ce diagramme montre qu’il CComObject
est dérivé de CYourClass
tandis qu’il CComAggObject
CComPolyObject
est inclus CYourClass
en tant que variable membre.
Il existe trois façons de définir un objet COM ATL. L’option standard consiste à utiliser la CComObject
classe dérivée de CYourClass
. La deuxième option consiste à créer un objet agrégé à l’aide de la CComAggObject
classe. La troisième option consiste à utiliser la CComPolyObject
classe. CComPolyObject
agit comme un CComObject
hybride : il peut fonctionner en tant que classe ou en tant que CComAggObject
classe, en fonction de la façon dont il est créé pour la première fois. Pour plus d’informations sur l’utilisation de la CComPolyObject
classe, consultez CComPolyObject, classe.
Lorsque vous utilisez ATL COM standard, vous utilisez deux objets : un objet externe et un objet interne. Les clients externes accèdent aux fonctionnalités de l’objet interne via les fonctions wrapper définies dans l’objet externe. L’objet externe est de type CComObject
.
Lorsque vous utilisez un objet agrégé, l’objet externe ne fournit pas de wrappers pour la fonctionnalité de l’objet interne. Au lieu de cela, l’objet externe fournit un pointeur directement accessible par les clients externes. Dans ce scénario, l’objet externe est de type CComAggObject
. L’objet interne est une variable membre de l’objet externe, et il est de type CYourClass
.
Étant donné que le client n’a pas à parcourir l’objet externe pour interagir avec l’objet interne, les objets agrégés sont généralement plus efficaces. En outre, l’objet externe n’a pas besoin de connaître les fonctionnalités de l’objet agrégé, étant donné que l’interface de l’objet agrégé est directement disponible pour le client. Toutefois, tous les objets ne peuvent pas être agrégés. Pour qu’un objet soit agrégé, il doit être conçu avec l’agrégation à l’esprit.
ATL implémente IUnknown en deux phases :
CComObject, CComAggObject ou CComPolyObject implémente les
IUnknown
méthodes.CComObjectRoot ou CComObjectRootEx gère le nombre de références et les pointeurs externes de
IUnknown
.
D’autres aspects de votre objet COM ATL sont gérés par d’autres classes :
CComCoClass définit la fabrique de classes et le modèle d’agrégation par défaut de l’objet.
IDispatchImpl fournit une implémentation par défaut de la
IDispatch Interface
partie de toutes les interfaces doubles sur l’objet.ISupportErrorInfoImpl implémente l’interface
ISupportErrorInfo
qui garantit que les informations d’erreur peuvent être propagées correctement dans la chaîne d’appels.
Dans cette section
Implémentation de CComObjectRootEx
Afficher des exemples d’entrées de mappage COM pour l’implémentation CComObjectRootEx
.
Implémentation de CComObject, CComAggObject et CComPolyObject
Explique comment les macros DECLARE_*_AGGREGATABLE affectent l’utilisation des CComObject
macros , CComAggObject
et CComPolyObject
.
Prise en charge d’IDispatch et IErrorInfo
Répertorie les classes d’implémentation ATL à utiliser pour prendre en charge les interfaces et IErrorInfo
les IDispatch
interfaces.
Prise en charge d’IDispEventImpl
Décrit les étapes à suivre pour implémenter un point de connexion pour votre classe.
Modification de la fabrique de classe et du modèle d’agrégation par défaut
Afficher les macros à utiliser pour modifier la fabrique de classes et le modèle d’agrégation par défaut.
Création d’un objet agrégé
Répertorie les étapes de création d’un objet agrégé.
Sections connexes
Création d’un projet ATL
Fournit des informations sur la création d’un objet COM ATL.
ATL
Propose des liens vers des rubriques conceptuelles traitant de la programmation à l'aide de la bibliothèque ATL (Active Template Library).