Partager via


Utilisation d’IConnectionPointContainer

Un objet connectable implémente IConnectionPointContainer (et l’expose via QueryInterface) pour indiquer l’existence d’interfaces sortantes. Pour chaque interface sortante, l’objet connectable gère un sous-objet point de connexion, qui implémente lui-même IConnectionPoint. L’objet connectable contient donc les points de connexion, d’où le nommage de IConnectionPointContainer et IConnectionPoint.

Grâce à IConnectionPointContainer, un client peut effectuer deux opérations. Tout d’abord, si le client dispose déjà de l’IID pour une interface sortante qu’il prend en charge, il peut localiser le point de connexion correspondant pour l’IID à l’aide de IConnectionPointContainer::FindConnectionPoint. Le client ne peut pas interroger le point de connexion directement en raison de la relation conteneur/contenu entre l’objet connectable et ses points de connexion contenus. Fondamentalement, FindConnectionPoint est le QueryInterface pour les interfaces sortantes lorsque l’IID est connu du client.

Deuxièmement, le client peut énumérer tous les points de connexion dans l’objet connectable via IConnectionPointContainer::EnumConnectionPoints. Cette méthode retourne un pointeur d’interface IEnumConnectionPoints pour un objet énumérateur distinct. Via IEnumConnectionPoints::Next, le client peut obtenir des pointeurs d’interface IConnectionPoint vers chaque point de connexion.

Une fois que le client a obtenu l’interface IConnectionPoint , il doit appeler IConnectionPoint::GetConnectionInterface pour déterminer l’IID de l’interface sortante prise en charge par chaque point de connexion. Si le client prend déjà en charge cette interface sortante, il peut établir une connexion. Sinon, il peut toujours être en mesure de prendre en charge l’interface sortante en utilisant les informations de la bibliothèque de types de l’objet connectable pour fournir une prise en charge au moment de l’exécution. Cette technique nécessite que l’objet connectable prend en charge l’interface IProvideClassInfo . (Voir Utilisation d’IProvideClassInfo.)

Étant donné que l’énumérateur est un objet distinct, le client doit appeler IEnumConnectionPoints::Release lorsque l’énumérateur n’est plus nécessaire. En outre, chaque point de connexion est un objet avec un nombre de références distinct de l’objet pouvant être connecté contenant. Par conséquent, le client doit également appeler IConnectionPoint::Release pour chaque point de connexion accessible via l’énumérateur ou par le biais de FindConnectionPoint.

Interfaces d’objet connectables