Partager via


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.

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

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 :

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 CComObjectmacros , CComAggObjectet 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é.

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).

Voir aussi

Concepts