Architecture d’objets connectables
L’objet connectable n’est qu’un élément de l’architecture globale des objets connectables. Cette technologie comprend les éléments suivants :
- Objet connectable. Implémente l’interfaceIConnectionPointContainer ; crée au moins un objet de point de connexion ; définit une interface sortante pour le client.
- Client. Interroge l’objet pour IConnectionPointContainer pour déterminer si l’objet est connectable ; crée un objet récepteur pour implémenter l’interface sortante définie par l’objet connectable.
- Objet récepteur. Implémente l’interface sortante ; permet d’établir une connexion à l’objet connectable.
- Objet point de connexion. Implémente l’interfaceIConnectionPointet gère la connexion avec le récepteur du client.
Les relations entre le client, l’objet connectable, un point de connexion et un récepteur sont illustrées dans le diagramme suivant :
Avant que l’objet de point de connexion appelle des méthodes dans l’interface récepteur à l’étape 3 du diagramme précédent, il doit queryInterface pour l’interface spécifique requise, même si le pointeur a déjà été passé à l’étape 2 appel à la méthode Conseiller.
Deux objets d’énumérateur sont également impliqués dans cette architecture, bien qu’ils ne soient pas affichés dans l’illustration. L’une est créée par une méthode dans IConnectionPointContainer pour énumérer les points de connexion dans l’objet connectable. L’autre est créé par une méthode dans IConnectionPoint pour énumérer les connexions actuellement établies à ce point de connexion. Un point de connexion peut prendre en charge plusieurs interfaces récepteur connectées et doit itérer dans la liste des connexions chaque fois qu’il effectue un appel de méthode sur cette interface. Ce processus est appelé multidiffusion.
Lors de l’utilisation d’objets connectables, il est important de comprendre que l’objet connectable, chaque point de connexion, chaque récepteur et tous les énumérateurs sont des objets distincts avec des IUnknown implémentations, des nombres de références distincts et des durées de vie distinctes. Un client utilisant ces objets est toujours responsable de la publication de toutes les références qu’il possède.
Note
Un objet connectable peut prendre en charge plusieurs clients et prendre en charge plusieurs récepteurs au sein d’un client. De même, un récepteur peut être connecté à plusieurs objets connectables.
Les étapes d’établissement d’une connexion entre un client et un objet connectable sont les suivantes :
- Le client interroge IConnectionPointContainer sur l’objet pour déterminer si l’objet est connectable. Si cet appel réussit, le client contient un pointeur vers l’interface IConnectionPointContainer sur l’objet connectable et le compteur de référence d’objet connectable a été incrémenté. Sinon, l’objet n’est pas connectable et ne prend pas en charge les interfaces sortantes.
- Si l’objet est connectable, le client tente ensuite d’obtenir un pointeur vers l’interface IConnectionPoint sur un point de connexion au sein de l’objet connectable. Il existe deux méthodes pour obtenir ce pointeur, à la fois dans IConnectionPointContainer ::FindConnectionPoint et dans IConnectionPointContainer ::EnumConnectionPoints. Il existe quelques étapes supplémentaires nécessaires si EnumConnectionPoints est utilisé. (Pour plus d’informations, consultez Utilisation de IConnectionPointContainer.) En cas de réussite, l’objet connectable et le client prennent tous deux en charge la même interface sortante. L’objet connectable le définit et l’appelle, et le client l’implémente. Le client peut ensuite communiquer via le point de connexion au sein de l’objet connectable.
- Le client appelle ensuite Conseiller sur le point de connexion pour établir une connexion entre son interface récepteur et le point de connexion de l’objet. Après cet appel, le point de connexion de l’objet contient un pointeur vers l’interface sortante sur le récepteur.
- Le code à l’intérieur Conseiller appelle QueryInterface sur le pointeur d’interface passé, demandant l’identificateur d’interface spécifique auquel il se connecte.
- L’objet appelle des méthodes sur l’interface du récepteur en fonction des besoins, en utilisant le pointeur conservé par son point de connexion.
- Le client appelle annuler la connexion. Ensuite, le client appelle IConnectionPoint ::Release pour libérer sa conservation sur le point de connexion et, par conséquent, l’objet connectable principal également. Le client doit également appeler IConnectionPointContainer ::Release pour libérer sa conservation sur l’objet connectable principal.
Rubriques connexes
-
interfaces objet connectables