Unterstützung von IDispEventImpl

Die Vorlage-Klasse IDispEventImpl kann verwendet werden, um Unterstützung für Verbindungspunkte im ATL COM-Objekt. Ein Verbindungspunkt kann das COM-Objekt zum Behandeln von Ereignissen, die von externen COM-Objekte ausgelöst. Diese Verbindungspunkte werden mit einer Ereignisbehandlungszuordnung, bereitgestellt durch das COM-Objekt zugeordnet.

Um einen Verbindungspunkt oder Punkte für das COM-Objekt ordnungsgemäß zu implementieren, müssen die folgenden Schritte abgeschlossen sein:

In diesem Verfahren werden Sie nur die Headerdatei (.h) der COM-Klasse ändern werden.

Die Typbibliotheken importieren

Für jedes externe Objekt, dessen Ereignisse Sie behandeln möchten, müssen Sie die Typbibliothek importieren. Dieser Schritt definiert die Ereignisse, die behandelt werden können und enthält Informationen, die verwendet wird, wenn der Ereignisbehandlungszuordnung deklarieren. Die # Import -Direktive kann verwendet werden, um dies zu erreichen. Fügen Sie die erforderlichen Import Richtlinie Zeilen für jedes Dispatch-Schnittstelle, die Sie unterstützt werden, die Headerdatei (.h) der COM-Klasse.

Das folgende Beispiel importiert die Typbibliothek eines externen COM-Servers ( MyServer ):

 # Import "D:\MyServer.dll" Raw_interfaces_only, No_namespace, named_guids

Hinweis&Nbsp;  Sie müssen eine separate # Import -Anweisung für jede externe Dispatchschnittstelle, die Sie unterstützt werden.

Deklarieren der IDispEventImpl-Schnittstellen

Nun, da Sie die Typbibliotheken der einzelnen Dispatch-Schnittstelle importiert haben, müssen Sie separate IDispEventImpl Schnittstellen für jede externe Dispatchschnittstelle deklarieren. Ändern Sie die Deklaration der Klasse COM durch eine Schnittstellendeklaration IDispEventImpl für jedes externe Objekt hinzufügen. Weitere Informationen zu den Parametern finden Sie unter IDispEventImpl.

Die folgenden Codezeilen deklarieren zwei Verbindungspunkte für den benutzerdefinierten IExtEvents1 und IExtEvents2 -Schnittstellen für das COM-Objekt von der Klasse implementiertCMyObj:

öffentliche IDispEventImpllt; 0, einer & DIID__IExtEvents1,
    & LIBID_EXTEVENTS1Lib, 1, 0 >,
öffentliche IDispEventImpl < 1, einer & DIID__IExtEvents2,
    & LIBID_EXTEVENTS2Lib, 1, 0 & Gt

Deklarieren einer Ereignisbehandlungszuordnung

In Reihenfolge für die Ereignisbenachrichtigungen von der ordnungsgemäßen Funktion behandelt werden muss das COM-Objekt jedes Ereignis zu seinem korrekten Ereignishandler weiterleiten. Dies wird erreicht durch Deklarieren einer Ereignisbehandlungszuordnung.

ATL stellt mehrere Makros, BEGIN_SINK_MAP, END_SINK_MAPund SINK_ENTRY, die diese Zuordnung erleichtern. Das standard-Format ist wie folgt:

BEGI&N_SINK_MAP(ComClass)
 Nbsp; SINK_ENTRY (Id, Dispid, Func)
... //zusätzliche externes Ereigniseinträge
END_SINK_MAP()

Im folgenden Beispiel wird eine Ereignisbehandlungszuordnung mit zwei Ereignishandler:

BEGIN_SINK_MAP(CMyObj)
   SINK_ENTRY (0, Events1, OnClick1)
   SINK_ENTRY (0, Events2, OnClick2)
END_SINK_MAP()

Die Umsetzung ist nahezu abgeschlossen. Der letzte Schritt betrifft die Beratung und unadvising der externen Schnittstellen.

Beratung und Anmeldung der IDispEventImpl-Schnittstellen

Der letzte Schritt ist, implementieren Sie eine Methode, die beraten (alle Verbindungspunkte oder abmeldet wird) zu den richtigen Zeiten. Diese Beratung muss durchgeführt werden, bevor die Kommunikation zwischen externen Clients und Ihr Objekt stattfinden kann. Bevor Ihr Objekt sichtbar wird, wird jedes externe Dispatchschnittstelle, die vom Objekt unterstützt nach Ausgangsschnittstellen abgefragt. Eine Verbindung wird hergestellt und ein Verweis auf die ausgehende Schnittstelle dient zum Behandeln von Ereignissen aus dem Steuerelement. Dieses Verfahren bezeichnet man als "Beratung."

Nachdem das Objekt mit den externen Schnittstellen, sollte die ausgehenden Schnittstellen mitgeteilt, dass sie durch das COM-Objekt nicht mehr verwendet werden. Diesen Prozess bezeichnet man als "abzumelden".

Aufgrund der einzigartigen Natur von COM-Objekten variiert dieses Verfahren, in Detail und Ausführung, zwischen Implementierungen. Diese Details würden den Rahmen dieses Themas sprengen und richten sich nicht.

Index