Hinzufügen von Verbindungspunkten zu einem Objekt

Das ATL-Lernprogramm veranschaulicht, wie Sie ein Steuerelement mit Unterstützung für Verbindungspunkte erstellen, Ereignisse hinzufügen und dann den Verbindungspunkt implementieren. ATL implementiert Verbindungspunkte mit der I Verbinden ionPointImpl-Klasse.

Um einen Verbindungspunkt zu implementieren, haben Sie zwei Möglichkeiten:

  • Implementieren Sie Ihre eigene ausgehende Ereignisquelle, indem Sie dem Steuerelement oder Objekt einen Verbindungspunkt hinzufügen.

  • Verwenden Sie eine in einer anderen Typbibliothek definierte Verbindungspunktschnittstelle wieder.

In beiden Fällen verwendet der Assistent zum Implementieren von Verbinden ionspunkt eine Typbibliothek, um seine Arbeit auszuführen.

So fügen Sie einem Steuerelement oder Objekt einen Verbindungspunkt hinzu

  1. Definieren Sie eine Dispinterface im Bibliotheksblock der IDL-Datei. Wenn Sie die Unterstützung für Verbindungspunkte aktiviert haben, wenn Sie das Steuerelement mit dem ATL-Steuerelement-Assistenten erstellt haben, wird die Dispinterface bereits erstellt. Wenn Sie beim Erstellen des Steuerelements keine Unterstützung für Verbindungspunkte aktiviert haben, müssen Sie der IDL-Datei manuell eine Dispinterface hinzufügen. Im Folgenden sehen Sie ein Beispiel für eine Dispinterface. Ausgehende Schnittstellen sind nicht erforderlich, um Schnittstellen zu verteilen, aber viele Skriptsprachen wie VBScript und JScript erfordern dies, sodass in diesem Beispiel zwei Dispinterfaces verwendet werden:

    [
       uuid(3233E37D-BCC0-4871-B277-48AE6B61224A),
       helpstring("Buddy Events")
    ]
    dispinterface DBuddyEvents
    {
       properties:
       methods:
    };
    

    Verwenden Sie entweder das Hilfsprogramm uuidgen.exe oder guidgen.exe, um eine GUID zu generieren.

  2. Fügen Sie die dispinterface als [default,source] Schnittstelle in der Coclass für das Objekt in der IDL-Datei des Projekts hinzu. Wenn Sie die Unterstützung für Verbindungspunkte beim Erstellen des Steuerelements aktiviert haben, erstellt der ATL-Steuerelement-Assistent den [default,sourceEintrag ]. Um diesen Eintrag manuell hinzuzufügen, fügen Sie die Zeile fett ein:

    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 klicken Sie auf "Verbinden ionspunkt hinzufügen".

  4. Wählen Sie im Listenfeld "Quellschnittstellen" des Assistenten zum Implementieren Verbinden ionspunkts die Schnittstellen von Project aus. Wenn Sie eine Schnittstelle für Ihr Steuerelement auswählen und "OK" drücken, gehen Sie wie folgt vor:

    • Generieren Sie eine Headerdatei mit einer Ereignisproxyklasse, die den Code implementiert, der die ausgehenden Aufrufe für das Ereignis durchführt.

    • Fügen Sie der Verbindungspunktkarte einen Eintrag hinzu.

    Außerdem wird eine Liste aller Typbibliotheken auf Ihrem Computer angezeigt. Sie sollten nur eine dieser anderen Typbibliotheken verwenden, um Ihren Verbindungspunkt zu definieren, wenn Sie genau dieselbe ausgehende Schnittstelle implementieren möchten, die in einer anderen Typbibliothek enthalten ist.

So verwenden Sie eine in einer anderen Typbibliothek definierte Verbindungspunktschnittstelle wiederverwenden

  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 klicken Sie auf "Verbinden ionspunkt hinzufügen".

  2. Wählen Sie im Assistenten zum Implementieren von Verbinden ionspunkt eine Typbibliothek und eine Schnittstelle in der Typbibliothek aus, und klicken Sie auf "Hinzufügen".

  3. Bearbeiten Sie die IDL-Datei in einer der folgenden Aktionen:

    • Kopieren Sie die Dispinterface aus der IDL-Datei für das Objekt, dessen Ereignisquelle verwendet wird.

    • Verwenden Sie die Importlib-Anweisung für diese Typbibliothek.

Siehe auch

Verbinden ionspunkt