Événements dans COM et objets connectables
Lorsqu’un programme détecte quelque chose qui s’est produit, il peut avertir ses clients. Par exemple, si un programme de cycles boursiers détecte une modification du prix d’une action, il peut informer tous les clients de la modification. 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 avertis. Les objets peuvent également utiliser objets connectables pour gérer des informations détaillées sur les clients qui ont demandé des notifications.
Les objets com connectables fournissent des interfaces sortantes à leurs clients en plus de leurs interfaces entrantes. Par conséquent, les objets et leurs clients peuvent participer à 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 des 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 des méthodes de l’interface sortante sur l’objet récepteur pour informer le client des modifications apportées à l’objet, déclencher des événements dans le client, demander quelque chose à partir du client, ou, en fait, à tout effet, le créateur de l’objet est fourni.
Un exemple d’interface sortante est une interface IButtonSink définie par un contrôle de bouton push pour informer ses clients de ses événements. Par exemple, l’objet bouton 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 connecter ce récepteur au contrôle 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 affecter à 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 n’importe quel type peut utiliser cette technologie. En plus de la technologie d’objet connectable générale, 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 qui intéressent le client. Par exemple, IAdviseSink peut être utilisé par des objets pour informer les clients des modifications de données et d’afficher les modifications apportées à l’objet.
Pour plus d’informations, consultez les rubriques suivantes :
- Architecture des objets connectables
- interfaces objet connectables