Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Remarque
La bibliothèque de modèles actifs (ATL) continue d’être prise en charge. Toutefois, nous n’ajoutons plus de fonctionnalités ni ne mettons à jour la documentation.
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 que CComObject est dérivé de CYourClass, alors que CComAggObject et CComPolyObject incluent CYourClass comme 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 fonctionne comme un hybride : il peut fonctionner en tant que CComObject classe ou en tant que CComAggObject classe, selon la manière dont il est initialement créé. 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
IUnknownmé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 Interfacepartie de toutes les interfaces doubles sur l’objet.ISupportErrorInfoImpl implémente l’interface
ISupportErrorInfoqui 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 IDispatch et IErrorInfo.
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).