Partager via


CONNECT, exemple d'attributs : illustre l'implémentation et l'utilisation des points de connexion

Mise à jour : novembre 2007

L'exemple d'attributs CONNECT illustre l'implémentation et l'utilisation de points de connexion (les interfaces IConnectionPointContainer et IConnectionPoint) dans un environnement multithread.

L'exemple illustre plusieurs attributs IDL, COM et du compilateur fréquemment utilisés, notamment support_errorinfo, event_source et event_receiver.

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 et exécuter cet exemple

  1. Ouvrez le fichier solution connect.sln.

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

  3. Sélectionnez le client que vous souhaitez exécuter, Drive ou Mdrive, pour en faire le projet de démarrage (cliquez avec le bouton droit sur le dossier du projet, puis cliquez sur Définir comme projet de démarrage). Vous trouverez davantage d'informations sur les clients dans la section « Fonctionnement de l'exemple ».

  4. Dans le menu Déboguer, cliquez sur Exécuter sans débogage.

Fonctionnement de l'exemple

Le serveur est implémenté dans Connect.dll. Cette DLL permet de créer un objet COM CoRandom implémenté par la classe C++ CRandom. L'objet COM prend en charge IRandom (interface double) et IConnectionPointContainer ; il accepte également les connexions destinées à l'interface IRandomEvent.

L'interface IRandom prend en charge les méthodes suivantes :

  • Start — démarre un thread à l'intérieur de l'objet.

  • Stop — arrête un thread à l'intérieur de l'objet.

  • StopAll — arrête tous les threads en cours d'exécution.

Pendant leur exécution, les threads secondaires situés à l'intérieur de l'objet continuent de déclencher des événements par le biais du point de connexion.

Deux clients sont fournis : Drive et MDrive. Ils se trouvent dans les sous-répertoires Drive et MDrive.

  • Drive.exe est une application console simple qui fournit un seul objet implémentant l'interface IRandomEvent. Elle crée un objet CoRandom, appelle Advise et Unadvise sur le point de connexion et demande à l'objet CoRandom de déclencher des événements dans l'objet de l'application Drive.

  • Mdrive.exe est une application MFC basée sur des boîtes de dialogue, capable de créer plusieurs récepteurs de notifications et de contrôler le nombre de threads créés par le serveur. Lorsque vous exécutez Mdrive.exe, cliquez au moins une fois sur le bouton Start, puis cliquez plusieurs fois sur le bouton Advise. Chaque clic sur le bouton Advise ajoute un point de connexion, ce qui élargit l'affichage. Si vous ne cliquez pas sur le bouton Advise, aucune activité n'est constatée dans l'affichage.

Attributs

Cet exemple utilise les attributs suivants :

  • Connect   coclass, default, dll, dual, event_source, helpstring, id, in, module, name, object, out, pointer_default, progid, support_error_info, uuid, vi_progid

  • Connect/drive   event_receiver, module

Mots clés

Cet exemple utilise les mots clés suivants :

AfxGetApp ; AfxMessageBox ; AtlAdvise ; ATLASSERT ; AtlUnadvise ; BEGIN_COM_MAP ; BEGIN_CONNECTION_POINT_MAP ; BEGIN_MESSAGE_MAP ; BEGIN_OBJECT_MAP ; CComCoClass ; CComModule::GetClassObject ; CComModule::GetLockCount ; CComModule::Init ; CComModule::RegisterServer ; CComModule::Term ; CComModule::UnregisterServer ; CComObject::CreateInstance ; CComObjectRoot ; CDialog::OnCancel ; CDialog::OnOK ; CloseHandle ; CoCreateInstance ; COleTemplateServer::RegisterAll ; COM_INTERFACE_ENTRY ; COM_INTERFACE_ENTRY_IMPL ; COM_INTERFACE_ENTRY2 ; CONNECTION_POINT_ENTRY ; CoUninitialize ; CreateEvent ; CreateThread ; DECLARE_REGISTRY_RESOURCEID ; DisableThreadLibraryCalls ; DoModal ; DrawIcon ; END_COM_MAP ; END_CONNECTION_POINT_MAP ; END_MESSAGE_MAP ; END_OBJECT_MAP ; GdiFlush ; GetClientRect ; GetDlgItem ; GetTickCount ; GetUnknown ; IConnectionPointContainerImpl ; IConnectionPointImpl ; IDispatchImpl ; ISupportErrorInfo ; LoadIcon ; Lock ; memset ; OBJECT_ENTRY ; ON_COMMAND ; puts ; ReleaseDC ; SendMessage ; SetEvent ; SetIcon ; SetPixel ; Sleep ; Unadvise ; Unlock ; WaitForSingleObject

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.

Voir aussi

Autres ressources

Exemples d'attributs ATL