Freigeben über


CONNECT-Attribute-Beispiel: Veranschaulicht, Implementierung und Verwendung von Verbindungspunkten

Dieses Beispiel veranschaulicht die Implementierung und Verwendung von Verbindungspunkten (die IConnectionPointContainerIConnectionPoint Schnittstellen und) in einer Multithreadumgebung.

Das Beispiel veranschaulicht einige Attribute für IDL, COM und Compiler, u. a. Support_errorinfo, Event_source und Event_receiver häufig verwendet.

SicherheitshinweisSicherheitshinweis

Dieser Beispielcode soll ein Konzept veranschaulichen, und es wird nur den Code, der für dieses Konzept relevant sind. Möglicherweise erfüllt dieser nicht die Sicherheitsanforderungen für eine bestimmte Umgebung, und er sollte nicht genau wie dargestellt verwendet werden. Wir empfehlen, Sicherheits- und Fehlerbehandlungscode hinzuzufügen, um Ihre Projekte sicherer und stabiler zu machen. Microsoft stellt diesen Beispielcode "Wie besehen"keine Garantien.

So erhalten Sie Beispiele und Anweisungen für deren Installation:

Um Beispiele von Visual Studio zuzugreifen

  • im Menü Hilfe Menü klicken Beispiele.

    Standardmäßig sind die Beispiele in installiert. Laufwerk: \Programme\Microsoft visual Studio 10.0\Samples\.

  • Die neueste Version dieses Beispiels und eine Liste der anderen Beispiele finden Sie unter Visual Studio Samples auf der MSDN-Website.

Erstellen und Ausführen des Beispiels

So erstellen und in diesem Beispiel führen

  1. Öffnen Sie die Projektmappe Datei connect.sln.

  2. From the Build menu, click Build Solution.

  3. Wählen Sie die Client Drive oder MDrive, ausgeführt werden soll und Sie das Startprojekt (Rechtsklick das Projekt Ordner und klicken Sie auf als Startprojekt festlegen). Weitere Informationen zu den Clients finden Sie im Abschnitt Beispiel Funktionsweise des.

  4. Debuggen Sie auf Menü, klicken Sie auf Starten ohne Debuggen.

Funktionsweise des Beispiels

Der Server ist in Connect.dll implementiert. Dieser DLL ermöglicht das Erstellen eines CoRandom COM-Objekts, von der CRandom C++-Klasse implementiert. Das COM-Objekt unterstützt, IRandom (eine duale Schnittstelle) und IConnectionPointContainer, und es akzeptiert Verbindungen für die Schnittstelle IRandomEvent.

Die IRandom-Schnittstelle unterstützt die folgenden Methoden:

  • Start – startet einen Thread innerhalb des Objekts

  • Stop – beendet einen Thread innerhalb des Objekts

  • StopAll – beendet alle aktiven Threads

Bei der Ausführung beibehalten sekundären Threads innerhalb des Objekts Ereignisse durch den Verbindungspunkt ausgelöst.

Es stehen zwei Clients zur Verfügung: Laufwerk und MDrive. Sie können in den Unterverzeichnissen Drive und MDrive gefunden werden.

  • Drive.exe ist eine einfache Konsolenanwendung, die ein einzelnes Objekt zur Implementierung der Schnittstelle IRandomEvent stellt. Er erstellt ein CoRandom Objekt Aufrufe Advise und Unadvise für den Verbindungspunkt auf und macht das Auslösen von Ereignissen in das Laufwerk Objekt CoRandom-Objekt.

  • Mdrive.exe ist eine MFC-Dialogfeldern basierende Anwendung, können mehrere erstellen advise-Empfänger und die Anzahl der Threads, die der Server erstellt steuern. Wenn Sie Mdrive.exe ausführen, die Startschaltfläche mindestens einmal klicken Sie auf die Schaltfläche Advise mehrmals. Wird jedes Klicken der Schaltfläche Advise einen Verbindungspunkt hinzugefügt, der wodurch der Anzeigebereich verbreitert wird. Wenn Sie nicht auf die Schaltfläche "Advise" klicken, werden Sie nicht in der Anzeige keine Aktivitäten angezeigt.

Attribute

In diesem Beispiel werden die folgenden Attribute verwendet:

  • 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

Schlüsselwörter

In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:

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

Hinweis

Einige Beispiele wie diesen, wurden nicht geändert, um Änderungen in der Visual C++-Assistenten, Bibliotheken und Compiler, demonstrieren aber dennoch wie Sie die gewünschte Aufgabe durchführen.

Siehe auch

Weitere Ressourcen

ATL-Attributbeispiele