Notions de base des objets COM ATL
L'illustration suivante représente la relation entre les classes et les interfaces utilisées pour définir un objet ATL COM.
Notes
Ce diagramme montre qu' CComObject est dérivé d' CYourClass pendant qu' CComAggObject et CComPolyObject incluent CYourClass comme variable membre.
Il existe trois façons de définir un objet ATL COM. L'option standard est d'utiliser la classe d' CComObject dérivée d' CYourClass. La deuxième option consiste à créer un objet regroupé en agrégats à l'aide de la classe d' CComAggObject . La troisième option consiste à utiliser la classe d' CComPolyObject . CComPolyObject agit comme un hybride : il peut fonctionner comme une classe d' CComObject ou comme classe d' CComAggObject , selon la façon dont il est d'abord créé. Pour plus d'informations sur l'utilisation de la classe CComPolyObject, 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 qui sont définies dans l'objet externe. l'objet externe est de type CComObject.
Lorsque vous utilisez un objet regroupé en agrégats, l'objet externe ne fournit pas les wrappers pour les fonctionnalités de l'objet interne. Au lieu de cela, l'objet externe fournit un pointeur qui est directement accessible par les clients externes. Dans ce cas, 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 ne doit pas passer par l'objet externe pour interagir avec l'objet interne, les objets regroupés en agrégats sont généralement plus efficaces. De plus, l'objet externe ne doit pas connaître les fonctionnalités de l'objet regroupé en agrégats, dans la mesure où l'interface de l'objet regroupé en agrégats est directement à la disposition du client. Toutefois, tous les objets peuvent être regroupés. Pour qu'un objet est regroupé, il doit être conçu avec une agrégation à l'esprit.
Implémente IUnknown ATL en deux phases :
Outils deCComObject, de CComAggObject, ou de CComPolyObject les méthodes d' IUnknown .
CComObjectRoot ou CComObjectRootEx gère le décompte de références et les pointeurs externes d' IUnknown.
D'autres aspects de votre objet ATL COM sont traités par d'autres classes :
CComCoClass définit le modèle par défaut de la fabrique de classe et le regroupement de l'objet.
IDispatchImpl fournit une implémentation par défaut de la partie d' IDispatch Interface de toutes les interfaces doubles sur l'objet.
ISupportErrorInfoImpl implémente l'interface d' ISupportErrorInfo qui vérifie les informations d'erreur peut être propagée vers le haut de la chaîne d'appels correctement.
Dans cette section
implémenter CComObjectRootEx
Entrées de mappage COM d'exemple show pour implémenter CComObjectRootEx.implémenter CComObject, CComAggObject, et CComPolyObject
Décrit comment les macros de DECLARE_*_AGGREGATABLE affectent l'utilisation d' CComObject, d' CComAggObject, et d' CComPolyObject.IDispatch et de prise en charge IErrorInfo
Répertorie les classes d'implémentation ATL à utiliser pour prendre en charge IDispatch et les interfaces d' IErrorInfo .IDispEventImpl prenant
Décrit les étapes pour implémenter un point de connexion pour votre classe.Modifier le modèle par défaut de fabrique de classes et de regroupement
Afficher les macros à utiliser pour modifier la fabrique de classes et le regroupement par défaut modèle.créer un objet regroupé en agrégats
Répertorie les étapes pour créer un objet regroupé en agrégats.
Rubriques connexes
créer un projet ATL
Fournit des informations sur la création d'un objet ATL COM.ATL
Fournit des liens vers des rubriques conceptuelles sur comment programmer avec la bibliothèque ATL.