Beispiel für ATLDuck-Attribute: Verwendet Verbindungspunkte mit ATL
Aktualisiert: November 2007
Das Beispiel für ATLDuck-Attribute besteht aus zwei Projekten: atlduck und duck. Das duck-Projekt erstellt eine Instanz eines Objekts, das die IDuckInt-Schnittstelle implementiert. Diese Schnittstelle umfasst vier Memberfunktionen: Flap, Paddle, Quack und Walk..
Das zweite Projekt (atlduck) besitzt einen Verbindungspunkt für die IDuckInt-Schnittstelle (d. h., es kann die Schnittstelle verwenden, implementiert sie jedoch nicht). Es wird nur eine einzelne Instanz dieses Objekts erstellt. Wenn die Verbindung zwischen den beiden Anwendungen eingerichtet ist, ruft atlduckdie Funktionen in der IDuckInt-Schnittstelle für Empfänger auf, die IConnectionPoint::Advise aufgerufen haben.
In ATLDuck werden verschiedene IDL-, COM- und Compilerattribute demonstriert. Hierzu gehören u. a. aggregatable, event_source und event_receiver. Sie können die DuckInt-Klasse aggregratunfähig machen, indem Sie das aggregratable("never")-Attribut festlegen. Die DuckDoer-Klasse wird als comevent_source eingerichtet und die DuckInt-Klasse als comevent_receiver ohne die Einstellung layout dependent=true.
Das ATLDuck-Beispiel ist die nicht attributierte Version dieses Beispiels.
Sicherheitshinweis: |
---|
Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird. |
So rufen Sie Beispiele und Anweisungen für ihre Installation ab
Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.
Weitere Informationen finden Sie unter Suchen von Beispieldateien.
Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.
Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.
Erstellen und Ausführen des Beispiels
So erstellen Sie dieses Beispiel
Öffnen Sie die Projektmappendatei atlduck.sln.
Klicken Sie im Menü Erstellen auf Projektmappe erstellen. Dadurch werden beide Projekte erstellt und die erforderlichen Registrierungen vorgenommen. Die folgenden Dateien werden erstellt:
atlduck.exe, ein EXE-Server
duck.exe, ein EXE-Client
So führen Sie dieses Beispiel aus
Klicken Sie im Menü Debuggen auf Starten ohne Debuggen. Dadurch werden der atlduck-Server und eine Instanz des duck-Clients gestartet. Um mehr als einen Client auszuführen, navigieren Sie zu dem Verzeichnis, in dem sich duck.exe befindet, und starten die Ausführung manuell an der Eingabeauffoderung.
Ein Dialogfeld wird angezeigt. Klicken Sie im Dialogfeld auf die Schaltfläche CreateDoDuck Object. Wenn Sie auf diese Schaltfläche klicken, erstellt die Anwendung eine Instanz eines Objekts mit der Klasse ID CLSID_DuckDoer zur Ausführung von atlduck.
Ein neues, durch die Datei atlduck.exe ausgegebenes Dialogfeld wird angezeigt. Dieses Dialogfeld umfasst eine Schaltfläche für jede einzelne Funktion in der IDuckInt-Schnittstelle sowie ein Listenfeld mit allen Verbindungen zu aktiven Empfängern und den entsprechenden Cookies. Über die Entendialogfelder können Sie für den Verbindungspunkt entweder Advise oder Unadvise aufrufen. In Abhängigkeit von den gewählten Optionen erhalten Sie Benachrichtigungen von den entsprechenden Quellen oder nicht. Wenn Sie eine Benachrichtigung empfangen, wird diese im Statusbearbeitungsfeld angezeigt. Darüber hinaus zeigt ATLDuck beim Abrufen der Verbindung den Wert des vom Verbindungspunkt ausgegebenen Cookies an.
Attribute
In diesem Beispiel werden die folgenden Attribute verwendet:
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
Klassen und Schlüsselwörter
In diesem Beispiel werden die folgenden Klassen verwendet:
CDialog(MFC),CComObject(ATL),IConnectionPointImpl<CDuckDoer>(ATL)
In diesem Beispiel werden die folgenden Schlüsselwörter verwendet:
_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
Hinweis: |
---|
In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können. |