ATLDuck, exemple : utilise les points de connexion avec ATL
Mise à jour : novembre 2007
L'exemple ATLDuck comprend quatre projets : atlduck, duck et leurs projets proxy/stub respectifs, à savoir atlduckPS et duckPS. 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.
Cet exemple utilise également le code de marshaling requis (dans atlduckPS et duckPS) pour connecter des interfaces dans différents processus.
L'exemple d'attributs ATLDuck est la version avec 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 quatre projets et effectue l'inscription nécessaire. Les fichiers suivants sont créés :
atlduck.exe, un serveur EXE ;
atlduckPS.dll, une DLL de marshaling pour le serveur atlduck.exe ;
duck.exe, un client EXE.
duckPS.dll, une DLL de marshaling pour le client duck.exe.
Pour exécuter cet exemple
Démarrez une ou plusieurs instances de duck.exe.
Remarque : L'illustration des points de connexion sera plus efficace si vous ouvrez plusieurs instances de duck.exe.
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 chaque fonction 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.
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