Teilen über


Hinzufügen von Verbindungspunkten zu einem Objekt

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

  1. Definieren Sie eine Dispinterface im Bibliotheksblock der .idl Datei. 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 .idl manuell 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 das guidgen.exe-Hilfsprogramm, um eine GUID zu generieren.

  2. 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 .idl Datei im Circ ATL-Beispiel.

  3. 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.

  4. 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

  1. Klicken Sie in der Klassenansicht mit der rechten Maustaste auf eine Klasse, die ein BEGIN_COM_MAP Makro implementiert, zeigen Sie im Kontextmenü auf "Hinzufügen ", und wählen Sie " Verbindungspunkt hinzufügen" aus.

  2. 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.

  3. Bearbeiten Sie die .idl-Datei, um entweder:

    • Kopieren Sie die Dispatchschnittstelle aus der .idl Datei für das Objekt, dessen Ereignisquelle verwendet wird.
    • Verwenden Sie die importlib-Anweisung für diese Typbibliothek.

Weitere Informationen

Verbindungspunkt