ATLDuck, exemple d'attributs : utilise des points de connexion avec ATL
Mise à jour : novembre 2007
L'exemple d'attributs ATLDuck se compose de deux projets : atlduck et duck. Le projet duck crée une instance d'un objet qui implémente l'interface IDuckInt. Cette interface comprend quatre fonctions membres : Flap, Paddle, Quack et Walk.
Le second projet, atlduck, comprend un point de connexion pour l'interface IDuckInt (c'est-à-dire qu'il sait utiliser l'interface mais ne l'implémente pas). Une seule instance de cet objet est créée. Une fois la connexion établie entre les deux applications, atlduck appelle les fonctions de l'interface IDuckInt pour obtenir les récepteurs qui ont appelé IConnectionPoint::Advise.
Divers attributs IDL, COM et du compilateur sont illustrés dans ATLDuck, notamment aggregatable, event_source et event_receiver. L'agrégation de la classe DuckInt est rendue impossible par la spécification de l'attribut aggregratable ("never"). La classe DuckDoer est configurée comme un événement com event_source et la classe DuckInt comme un événement com event_receiver, non dépendants de la présentation (sans layout_dependent=true).
L'exemple ATLDuck est la version sans attributs de cet exemple.
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 Visual Studio 2008 Samples.
Des exemples sont également disponibles sur le disque dur de votre ordinateur. Des exemples et un fichier Readme sont stockés par défaut dans un dossier sous \Program Files\Visual Studio 9.0\Samples\. Pour les éditions Express de Visual Studio, tous les exemples sont disponibles en ligne.
Génération et exécution de l'exemple
Pour générer cet exemple
Ouvrez le fichier solution atlduck.sln.
Dans le menu Générer, cliquez sur Générer la solution. Cette opération génère les deux projets et effectue les inscriptions nécessaires. Les fichiers suivants sont créés :
atlduck.exe, un serveur EXE ;
duck.exe, un client EXE.
Pour exécuter cet exemple
Dans le menu Déboguer, cliquez sur Exécuter sans débogage. Le serveur atlduck et une instance du client duck démarrent. Pour exécuter plusieurs clients, accédez au répertoire sur lequel se trouve duck.exe et exécutez cet exécutable manuellement à partir de l'invite de commandes.
Une boîte de dialogue s'affiche. Dans la boîte de dialogue, cliquez sur le bouton Create DoDuck Object. Lorsque vous cliquez sur ce bouton, l'application crée une instance d'un objet avec la classe ID CLSID_DuckDoer qui exécute atlduck.
Une nouvelle boîte de dialogue s'affiche, émise par atlduck.exe. Cette boîte de dialogue affiche un bouton pour chacune des fonctions de l'interface IDuckInt, ainsi qu'une zone de liste comportant toutes les connexions aux récepteurs actifs et leurs cookies. Dans les boîtes de dialogue du projet duck, vous pouvez utiliser la méthode Advise ou Unadvise sur le point de connexion. En fonction de votre choix, vous recevrez ou ne recevrez pas de notifications provenant des sources. Lorsque vous la recevez, la notification s'affiche dans le champ d'édition d'état. Par ailleurs, ATLDuck montre la valeur du cookie fourni par le point de connexion lorsque la connexion est déterminée.
Attributs
Cet exemple utilise les attributs suivants :
ATLDuck aggregatable, coclass, dispinterface, event_source, exe, helpstring, id, module, name, progid, uuid, vi_progid
ATLDuck/Duck aggregatable, coclass, default, dispinterface, event_receiver, exe, helpstring, id, iid_is, in, module, name, object, out, progid, unique, uuid, version, vi_progid
Classes et mots clés
Cet exemple utilise les classes suivantes :
CDialog (MFC), CComObject (ATL), IConnectionPointImpl<CDuckDoer> (ATL)
Cet exemple utilise les mots clés suivants :
_ASSERTE ; _tcslen ; _VERIFY ; AddRef ; Advise ; BEGIN_COM_MAP ; BEGIN_CONNECTION_POINT_MAP ; BEGIN_MSG_MAP ; BEGIN_OBJECT_MAP ; CComCoClass ; CComModule::Unlock ; CComObjectRootEx ; CDialogImpl ; CenterWindow ; CoInitialize ; COM_INTERFACE_ENTRY ; COM_INTERFACE_ENTRY_IMPL ; COMMAND_HANDLER ; COMMAND_ID_HANDLER ; CONNECTION_POINT_ENTRY ; CoSuspendClassObjects ; CoUninitialize ; Create ; DECLARE_CLASSFACTORY_SINGLETON ; DECLARE_NOT_AGGREGATABLE ; DECLARE_REGISTRY_RESOURCEID ; DestroyWindow ; DispatchMessage ; EnableWindow ; END_COM_MAP ; END_CONNECTION_POINT_MAP ; END_MSG_MAP ; END_OBJECT_MAP ; ExitProcess ; FindConnectionPoint ; GetCommandLine ; GetDC ; GetDlgItem ; GetMessage ; GetTextExtentPoint32 ; IConnectionPointContainerImpl ; IConnectionPointImpl ; Init ; IsWindowVisible ; MESSAGE_HANDLER ; MessageBox ; OBJECT_ENTRY ; OleInitializeCoCreateInstance ; OnCancel ; OnFlap ; OnInitDialog ; OnOK ; OnPaddle ; OnWalk OnQuack ; PostThreadMessage ; QueryInterface ; RecalcListboxExtent ; RegisterClassObjects ; RegisterServer ; reinterpret_cast ; ReleaseDC ; RevokeClassObjects ; SendMessage ; SetOwner ; SetWindowText ; ShowStatus ; ShowWindow ; Unadvise ; UnregisterServer ; UNUSED_ALWAYS ; UpdateRegistryFromResource ; UpdateWindow ; USES_CONVERSION
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. |