Share via


Unterstützen von IDispEventImpl

Die Vorlagenklasse IDispEventImpl kann verwendet werden, um Unterstützung für Verbindungspunktsenken in Ihrer ATL-Klasse bereitzustellen. Mit einer Verbindungspunktsenke kann Ihre Klasse Ereignisse behandeln, die von externen COM-Objekten ausgelöst werden. Diese Verbindungspunktsenken werden mit einer Ereignissenkenzuordnung zugeordnet, die von Ihrer Klasse bereitgestellt wird.

Um eine Verbindungspunktsenke für Ihre Klasse ordnungsgemäß zu implementieren, müssen die folgenden Schritte ausgeführt werden:

  • Importieren der Typbibliotheken für jedes externe Objekt

  • Deklarieren der IDispEventImpl Schnittstellen

  • Deklarieren einer Ereignissenkenzuordnung

  • Raten und Aufheben der Benachrichtigung der Verbindungspunkte

Die Schritte zum Implementieren einer Verbindungspunktsenke werden alle durchgeführt, indem nur die Headerdatei (H) Ihrer Klasse geändert wird.

Importieren der Typbibliotheken

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 stellt Informationen bereit, die beim Deklarieren der Ereignissenkenzuordnung verwendet werden. Die #import-Direktive kann verwendet werden, um dies zu erreichen. Fügen Sie die erforderlichen #import Direktivenzeilen für jede Dispatch-Schnittstelle hinzu, die Sie der Headerdatei (H) Ihrer Klasse unterstützen.

Im folgenden Beispiel wird die Typbibliothek eines externen COM-Servers importiert (MSCAL.Calendar.7):

#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only

Hinweis

Sie müssen über eine separate #import Anweisung für jede externe Typbibliothek verfügen, die Sie unterstützen.

Deklarieren der IDispEventImpl-Schnittstellen

Nachdem Sie nun die Typbibliotheken jeder Verteilerschnittstelle importiert haben, müssen Sie separate IDispEventImpl Schnittstellen für jede externe Verteilerschnittstelle deklarieren. Ändern Sie die Deklaration Ihrer Klasse, indem Sie für jedes externe Objekt eine IDispEventImpl Schnittstellendeklaration hinzufügen. Weitere Informationen zu den Parametern finden Sie unter "IDispEventImpl".

Der folgende Code deklariert zwei Verbindungspunktsenken für die Schnittstelle für das von der DCalendarEvents Klasse CMyCompositCtrl2implementierte COM-Objekt:

public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>

Deklarieren einer Ereignissenkenzuordnung

Damit die Ereignisbenachrichtigungen von der richtigen Funktion behandelt werden können, muss die Klasse jedes Ereignis an den richtigen Handler weiterleiten. Dies wird durch Deklarieren einer Ereignissenkenzuordnung erreicht.

ATL bietet mehrere Makros, BEGIN_SINK_MAP, END_SINK_MAP und SINK_ENTRY_EX, die diese Zuordnung vereinfachen. Das Standardformat lautet wie folgt:

BEGIN_SINK_MAP(comClass)
  SINK_ENTRY_EX(id, iid, dispid, func)
  . . . //additional external event entries
END_SINK_MAP()

Im folgenden Beispiel wird eine Ereignissenkenzuordnung mit zwei Ereignishandlern deklariert:

BEGIN_SINK_MAP(CMyCompositCtrl2)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar1)
   SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()

Die Implementierung ist fast abgeschlossen. Der letzte Schritt betrifft die Beratung und Nichtbewaufsichtung der externen Schnittstellen.

Beratung und Aufhebung der IDispEventImpl-Schnittstellen

Der letzte Schritt besteht darin, eine Methode zu implementieren, die alle Verbindungspunkte zu den richtigen Zeiten berät (oder nicht zu beachten). Diese Beratung muss erfolgen, bevor die Kommunikation zwischen den externen Clients und Ihrem Objekt erfolgen kann. Bevor das Objekt sichtbar wird, wird jede externe Verteilerschnittstelle, die von Ihrem Objekt unterstützt wird, für ausgehende Schnittstellen abgefragt. Es wird eine Verbindung hergestellt, und ein Verweis auf die ausgehende Schnittstelle wird verwendet, um Ereignisse aus dem Objekt zu behandeln. Dieses Verfahren wird als "Beratung" bezeichnet.

Nachdem das Objekt mit den externen Schnittstellen fertig gestellt wurde, sollten die ausgehenden Schnittstellen benachrichtigt werden, dass sie von Der Klasse nicht mehr verwendet werden. Dieser Prozess wird als "nicht zu überwachen" bezeichnet.

Aufgrund der eindeutigen Art von COM-Objekten variiert dieses Verfahren im Detail und der Ausführung zwischen Implementierungen. Diese Details liegen außerhalb des Umfangs dieses Themas und werden nicht behandelt.

Siehe auch

Grundlagen von ARL COM-Objekten