Ajout de points de connexion à un objet
Le didacticiel ATL montre comment créer un contrôle avec prise en charge des points de connexion, comment ajouter des événements, puis comment implémenter le point de connexion. ATL implémente des points de connexion avec la classe IConnectionPointImpl .
Pour implémenter un point de connexion, vous avez deux choix :
Implémentez votre propre source d’événement sortante en ajoutant un point de connexion au contrôle ou à l’objet.
Réutiliser une interface de point de connexion définie dans une autre bibliothèque de types.
Dans les deux cas, l’Assistant Implémenter un point de connexion utilise une bibliothèque de types pour effectuer son travail.
Pour ajouter un point de connexion à un contrôle ou un objet
Définissez une dispinterface dans le bloc de bibliothèque du fichier .idl. Si vous avez activé la prise en charge des points de connexion lorsque vous avez créé le contrôle avec l’Assistant Contrôle ATL, la dispinterface sera déjà créée. Si vous n’avez pas activé la prise en charge des points de connexion lors de la création du contrôle, vous devez ajouter manuellement une dispinterface au fichier .idl. Voici un exemple de dispinterface. Les interfaces sortantes ne sont pas requises pour être distribuées, mais de nombreux langages de script tels que VBScript et JScript nécessitent cela. Cet exemple utilise donc deux dispinterfaces :
[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
Utilisez l’utilitaire uuidgen.exe ou guidgen.exe pour générer un GUID.
Ajoutez la dispinterface en tant qu’interface
[default,source]
dans la coclasse de l’objet dans le fichier .idl du projet. Là encore, si vous avez activé la prise en charge des points de connexion lors de la création du contrôle, l’Assistant Contrôle ATL crée l’entrée[default,source
] . Pour ajouter manuellement cette entrée, ajoutez la ligne en gras :coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
Consultez le fichier .idl dans l’exemple Circ ATL pour obtenir un exemple.
Utilisez la vue de classe pour ajouter des méthodes et des propriétés à l’interface d’événement. Cliquez avec le bouton droit sur la classe en mode Classe, pointez sur Ajouter dans le menu contextuel, puis cliquez sur Ajouter un point de connexion.
Dans la zone de liste Interfaces sources de l’Assistant Implémenter un point de connexion, sélectionnez les interfaces de Project. Si vous choisissez une interface pour votre contrôle et appuyez sur OK, vous allez :
Générez un fichier d’en-tête avec une classe proxy d’événement qui implémente le code qui effectue les appels sortants pour l’événement.
Ajoutez une entrée à la carte des points de connexion.
Vous verrez également une liste de toutes les bibliothèques de types sur votre ordinateur. Vous ne devez utiliser qu’une de ces autres bibliothèques de types pour définir votre point de connexion si vous souhaitez implémenter la même interface sortante que celle trouvée dans une autre bibliothèque de types.
Pour réutiliser une interface de point de connexion définie dans une autre bibliothèque de types
En mode Classe, cliquez avec le bouton droit sur une classe qui implémente une macro BEGIN_COM_MAP , pointez sur Ajouter dans le menu contextuel, puis cliquez sur Ajouter un point de connexion.
Dans l’Assistant Implémentation du point de connexion, sélectionnez une bibliothèque de types et une interface dans la bibliothèque de types, puis cliquez sur Ajouter.
Modifiez le fichier .idl sur :
Copiez la dispinterface à partir du fichier .idl pour l’objet dont la source d’événement est utilisée.
Utilisez l’instruction importlib sur cette bibliothèque de types.