Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das ATL-Tutorial demonstriert, wie Sie eine Kontrolle mit Support für Verbindungspunkte erstellen, wie Sie Ereignisse hinzufügen und dann den Verbindungspunkt implementieren. ATL implementiert Verbindungspunkte mit der IConnectionPointImpl Klasse.
Um einen Verbindungspunkt zu implementieren, haben Sie zwei Möglichkeiten:
- Implementieren Sie Ihre eigene ausgehende Ereignisquelle, indem Sie einen Verbindungspunkt zur Kontrolle oder zum Objekt hinzufügen.
- Verwenden Sie eine Verbindungspunkt-Benutzeroberfläche, die in einer anderen Typbibliothek definiert ist.
In beiden Fällen verwendet der Assistent zum Implementieren von Verbindungspunkte eine Typbibliothek, um seine Aufgaben zu erfüllen.
Hinzufügen eines Verbindungspunkts zu einem Steuerelement oder Objekt
Definieren Sie eine Dispinterface im Bibliotheksblock der
.idlDatei. Wenn Sie den Support für Verbindungspunkte aktiviert haben, als Sie die Kontrolle mit dem ATL Control Wizard erstellt haben, wird die Dispatchschnittstelle bereits erstellt sein. Wenn Sie beim Erstellen des Steuerelements keine Unterstützung für Verbindungspunkte aktiviert haben, müssen Sie der Datei.idlmanuell eine Dispinterface hinzufügen. Das Folgende ist ein Beispiel für eine Dispatchschnittstelle. Ausgehende Schnittstellen müssen keine Dispatchschnittstellen sein, aber viele Skriptsprachen wie VBScript und JScript erfordern dies, daher verwendet dieses Beispiel zwei Dispatchschnittstellen:[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };Verwenden Sie entweder das
uuidgen.exe- oder dasguidgen.exe-Hilfsprogramm, um eine GUID zu generieren.Fügen Sie die dispinterface als
[default,source]-Schnittstelle in die Coclass für das Objekt in der.idl-Datei des Projekts hinzu. Wenn Sie beim Erstellen des Steuerelements die Unterstützung für Verbindungspunkte aktiviert haben, erstellt der ATL-Steuerelement-Assistent den[default,source]Eintrag. Um diesen Eintrag manuell hinzuzufügen, fügen Sie die Zeile in fett hinzu:coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };Ein Beispiel finden Sie in der
.idlDatei im Circ ATL-Beispiel.Verwenden Sie die Klassenansicht , um der Ereignisschnittstelle Methoden und Eigenschaften hinzuzufügen. Klicken Sie in der Klassenansicht mit der rechten Maustaste auf die Klasse, zeigen Sie im Kontextmenü auf "Hinzufügen ", und wählen Sie "Verbindungspunkt hinzufügen" aus.
Wählen Sie im Listenfeld " Quellschnittstellen " des Assistenten zum Implementieren von Verbindungspunktdie Schnittstellen von Project aus. Wenn Sie eine Schnittstelle für Ihr Steuerelement auswählen und "OK" auswählen, wählen Sie Folgendes aus:
- Generieren Sie eine Headerdatei mit einer Ereignis-Proxy-Klasse, die den Code implementiert, der die ausgehenden Anrufe für das Ereignis ausführt.
- Hinzufügen eines Eintrags zur Verbindungspunktzuordnung
Außerdem wird eine Liste aller Typbibliotheken auf Ihrem Computer angezeigt. Verwenden Sie nur eine dieser anderen Typbibliotheken, um Ihren Verbindungspunkt zu definieren, wenn Sie die genau gleiche ausgehende Schnittstelle implementieren möchten, die in einer anderen Typbibliothek enthalten ist.
Wiederverwenden einer Verbindungspunktschnittstelle, die in einer anderen Typbibliothek definiert ist
Klicken Sie in der Klassenansicht mit der rechten Maustaste auf eine Klasse, die ein
BEGIN_COM_MAPMakro implementiert, zeigen Sie im Kontextmenü auf "Hinzufügen ", und wählen Sie " Verbindungspunkt hinzufügen" aus.Wählen Sie im Assistenten zum Implementieren von Verbindungspunkt eine Typbibliothek und eine Schnittstelle in der Typbibliothek aus, und wählen Sie "Hinzufügen" aus.
Bearbeiten Sie die
.idl-Datei, um entweder:- Kopieren Sie die Dispatchschnittstelle aus der
.idlDatei für das Objekt, dessen Ereignisquelle verwendet wird. - Verwenden Sie die importlib-Anweisung für diese Typbibliothek.
- Kopieren Sie die Dispatchschnittstelle aus der