Partager via


DispSink, exemple d'attributs : gère des événements déclenchés à partir d'un serveur COM singleton via une interface de dispatch

Mise à jour : novembre 2007

L'exemple d'attribut DispSink illustre un objet serveur singleton (objet qui ne peut avoir qu'une seule instance) qui possède sa propre interface double et une interface de dispatch utilisée pour le déclenchement d'événements.

L'exemple DispSink est la version sans attributs de cet exemple.

Remarque :

Certains exemples, tels que celui-ci, n'ont pas été modifiés pour refléter les changements apportés aux Assistants, aux bibliothèques et au compilateur Visual C++, mais ils illustrent bien l'exécution de la tâche souhaitée.

Note de sécurité :

Cet exemple de code est fourni pour illustrer un concept et ne doit pas être utilisé dans des applications ou des sites Web, car il peut ne pas illustrer les pratiques de programmation les plus sûres. Microsoft n'assume aucune responsabilité pour tout dommage indirect ou consécutif en cas d'utilisation de l'exemple de code à des fins autres que celles prévues.

Pour obtenir des exemples et des instructions d'installation :

  • Dans le menu ? (Aide) de Visual Studio, cliquez sur Exemples.

    Pour plus d'informations, consultez Recherche des fichiers d'exemple.

  • La liste la plus récente et la plus complète d'exemples est disponible en ligne à partir de la page d'exemples Visual Studio 2008.

  • Des exemples sont également disponibles sur le disque dur de votre ordinateur. Par défaut, des exemples et un fichier Readme sont copiés dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont accessibles en ligne.

Génération et exécution de l'exemple

Pour générer et exécuter cet exemple

  1. Ouvrez le fichier solution DispSink.sln.

  2. Dans le menu Générer, cliquez sur Générer la solution.

  3. Ouvrez deux instances ou plus de l'outil ActiveX Control Test Container et insérez le contrôle client, DispCtl, dans chaque instance. Pour plus d'informations sur la manière d'accéder à Test Container, consultez Test des propriétés et des événements à l'aide de Test Container.

  4. Appelez la méthode Connect sur tous les contrôles.

  5. Appelez la méthode Send sur l'un des contrôles. Dans le champ Type de paramètre de la boîte de dialogue Appeler les méthodes, spécifiez VT_BSTR, puis tapez n'importe quelle chaîne dans la zone Valeur du paramètre. Cliquez sur le bouton Invoke. La chaîne sera affichée au centre de tous les contrôles connectés.

  6. Appelez la méthode Disconnect sur tous les contrôles avant de les supprimer.

Fonctionnement de l'exemple

Le serveur est un objet singleton qui possède sa propre interface double ainsi qu'une interface de dispatch pour déclencher des événements. L'interface de dispatch est placée dans le fichier .idl à l'aide de l'attribut dispinterface. L'objet serveur reçoit les données par l'intermédiaire de la méthode Send de son interface double, puis les transmet à tous les composants connectés par le biais de l'événement Transfer sur son interface de dispatch. Dispserver utilise l'attribut event_source et Dispclient utilise l'attribut event_receiver.

Le client est un contrôle ActiveX qui contient un objet serveur. Le contrôle répond à l'événement Transfer déclenché par l'objet serveur. Il possède une interface double comprenant les méthodes Connect, Send et Disconnect. Si l'événement Transfer est déclenché à l'aide d'un variant contenant un BSTR, la chaîne est affichée au milieu du contrôle.

Attributs

Cet exemple utilise les attributs suivants :

  • DISPSINK/DispClient   coclass, dual, event_receiver, helpstring, id, module, object, pointer_default, registration_script, threading, uuid, version, vi_progid

  • DISPSINK/DispServer   coclass, default, dispinterface, dual, event_source, helpstring, id, module, object, pointer_default, threading, uuid, vi_progid

Mots clés

Cet exemple utilise les mots clés suivants :

#import; CComAutoThreadModule; CComSimpleThreadAllocator; CoCreateInstance; DECLARE_CLASSFACTORY_AUTO_THREAD; FireViewChange

Voir aussi

Autres ressources

Exemples d'attributs ATL