Événements dans com et objets connectables
Lorsqu’un programme détecte quelque chose qui s’est produit, il peut en informer ses clients. Par exemple, si un programme boursier détecte une modification du prix d’une action, il peut en informer tous les clients. Ce processus de notification est appelé déclenchement d’un événement.
Avec COM, les objets serveur peuvent utiliser des événements COM pour déclencher des événements sans aucune information sur les objets qui seront notifiés. Les objets peuvent également utiliser des objets connectables pour conserver des informations détaillées sur les clients qui ont demandé des notifications.
Les objets connectables COM fournissent des interfaces sortantes à leurs clients en plus de leurs interfaces entrantes. Par conséquent, les objets et leurs clients peuvent s’engager dans une communication bidirectionnelle. Les interfaces entrantes sont implémentées sur un objet et reçoivent des appels de clients externes d’un objet, tandis que les interfaces sortantes sont implémentées sur le récepteur du client et reçoivent des appels de l’objet. L’objet définit une interface qu’il souhaite utiliser et le client l’implémente.
Un objet définit ses interfaces entrantes et fournit des implémentations de ces interfaces. Les interfaces entrantes sont disponibles pour les clients via la méthode IUnknown::QueryInterface de l’objet. Les clients appellent les méthodes d’une interface entrante sur l’objet, et l’objet effectue les actions souhaitées pour le compte du client.
Les interfaces sortantes sont également définies par un objet, mais le client fournit les implémentations des interfaces sortantes sur un objet récepteur créé par le client. L’objet appelle ensuite les méthodes de l’interface sortante sur l’objet récepteur pour informer le client des modifications apportées à l’objet, pour déclencher des événements dans le client, pour demander quelque chose au client, ou, en fait, pour n’importe quel usage que le créateur de l’objet propose.
Un exemple d’interface sortante est une interface IButtonSink définie par un contrôle de bouton push pour notifier ses clients de ses événements. Par exemple, l’objet button appelle IButtonSink::OnClick sur l’objet récepteur du client lorsque l’utilisateur clique sur le bouton à l’écran. Le contrôle bouton définit l’interface sortante. Pour qu’un client du bouton gère l’événement, le client doit implémenter cette interface sortante sur un objet récepteur, puis le connecter au contrôle de bouton. Ensuite, lorsque des événements se produisent dans le bouton, le bouton appelle le récepteur, auquel moment le client peut exécuter l’action qu’il souhaite attribuer à ce bouton.
Les objets connectables fournissent un mécanisme général pour la communication objet-client. Tout objet qui souhaite exposer des événements ou des notifications de toute sorte peut utiliser cette technologie. En plus de la technologie générale des objets connectables, COM fournit de nombreuses interfaces de récepteur et de site à usage spécial utilisées par les objets pour informer les clients d’événements spécifiques intéressant le client. Par exemple, IAdviseSink peut être utilisé par des objets pour informer les clients des données et afficher les modifications apportées à l’objet.
Pour plus d'informations, voir les rubriques suivantes :