Le Didacticiel ATL mo&ntre comment créer un contrôle avec l'aide de points de connexion, comment ajouter des événements, puis comment mettre en place la connexion point.nbsp ; IConnectionPointImpl discute comment ATL implémente un point de connexion.
Pour implémenter un point de connexion, vous avez deux choix:
Mettre en œuvre votre propre source d'événements sortant (point de connexion).
Réutiliser une interface de point de connexion définie dans une autre bibliothèque de types.
Dans les deux cas, l'Assistant de point de connexion utilise une bibliothèque de types à faire son travail.
&Notenbsp ; Chaque fois que vous ajoutez une méthode à une interface dispinterface sur lequel vous avez déjà implémenté un point de connexion, vous devez recompiler le fichier .idl et puis suivez la procédure pour ajouter un point de connexion pour un contrôle ou un objet.
Pour ajouter un point de connexion pour un contrôle ou un objet
Définir une dispinterface dans le bloc de la bibliothèque du fichier .idl. Si vous avez sélectionné la case à cocher Aide les Points de connexion dans l'onglet attributs de l'Assistant objet ATL, dispinterface sera déjà créée. Si vous n'a pas vérifié la case à cocher Aide les Points de connexion , vous devez ajouter manuellement une dispinterface dans le fichier .idl. Voici un exemple d'une dispinterface. Interfaces sortantes ne sont pas tenus d'être des interfaces de dispatch, mais de nombreux langages de script comme VBScript et JavaScript exigent, pour que cet exemple utilise deux dispinterfaces:
Utiliser les utilitaires uuidgen.exe ou guidgen.exe pour générer un GUID.
Ajouter la dispi&nterface comme [la valeur par défaut, une source] interface de coclasse de la object.nbsp ; Encore une fois, si vous avez sélectionné la case à cocher Aide les Points de connexion dans l'onglet attributs de l'Assistant objet ATL pour ce contrôle, l'Assistant va créer le [par défaut, la source] entrée. Pour ajouter manuellement cette entrée, ajoutez la ligne en gras:
Voir le fichier .idl du l'échantillon pour obtenir un exemple de Circ ATL.
Utilisez ClassView pour ajouter des méthodes et des propriétés de l'interface d'événement.
Après que la dispi&nterface est entièrement définie, compilez le fichier .idl en cliquant le fichier .idl FileView et en sélectionnant la compilation option.nbsp ; Cela produira à la bibliothèque de types.
Cliquez droit sur la classe da&ns ClassView et sélectionnez le Point de mettre en œuvre connexion.... Une boîte de dialogue affiche un ou plusieurs onglets de bibliothèque de type et chaque onglet affiche les interfaces pour library.nbsp de ce type ; Si vous choisissez une interface et appuyez sur OK, vous allez:
Générer un fichier d'en-tête avec une classe de proxy d'événement qui implémente le code qui feront les appels sortant pour l'événement.
Ajouter une entrée à la carte de point de connexion.
Ajouter un commentaire et le type (vous dire de remplacer le paramètre NULL avec l'adresse du dispID) à la liste des paramètres de IProvideClassInfo2Impl.
Si vous pas co&nstruire votre bibliothèque de types, vous verrez une liste de tous les typelibs sur votre computer.nbsp ; Vous devez uniquement utiliser un de ces autres typelibs pour définir votre point de connexion si vous souhaitez implémenter la même interface sortante exacte dans une autre bibliothèque de types. Si vous générez une bibliothèque de types avec aucune interface de source par défaut de la coclasse, la boîte de dialogue affiche un message d'avertissement ne signalé aucune interface approprié (source) dans la bibliothèque de types.
Pour mettre en œuvre un point de connexion provenant de la bibliothèque de type de l'objet en un autre
Dans ClassView, faites un clic droit sur une classe qui implémente une macro BEGIN_COM_MAP et sélectionnez le point de connexion de mise en œuvre dans le menu contextuel.
Dans la boîte de dialogue Point de connexion de mise en oeuvre , cliquez sur Ajouter Typelib....
Sélectio&nnez à partir de la libraries.nbsp de type disponible ; Après que vous sélectionnez la bibliothèque de types, vous verrez une liste des interfaces disponibles dans la bibliothèque de types.
Choisissez une ou plusieurs des interfaces disponibles et cliquez sur OK.
Modifiez le fichier .idl soit:
Copiez le fichier idl pour l'objet dont source d'événements est utilisée la dispinterface.
Utilisez la directive importlib sur cette bibliothèque de types.
Voici un exemple d'un fichier .idl qui utilise le point de connexion du contrôle Circ.
[
UUID(38BBFD91-7575-11D1-8C3C-0060083E866C),
version(1.0),
helpstring ("16190 1.0 Type Library")
]
Bibliothèque MY16190Lib
{
importlib("Stdole32.tlb") ;
importlib("STDOLE2.tlb") ;
importlib("D:\\ATL25\\samples\\circ\\circ.tlb") ; / / **** ajouter cette ligne [[]
UUID(38BBFD9E-7575-11D1-8C3C-0060083E866C),
helpstring ("Atl16190Ctl Class")
]
coclasse Atl16190Ctl
{
interface [default] IAtl16190Ctl ;
[par défaut, source] dispinterface _CircEvents ; / / **** et un
};
}