Freigeben über


COM-Ereignisse

In diesem Abschnitt wird eine Übersicht über Verbindungspunkte und eine Einführung in die ereignisbezogene Terminologie gegeben, die normalerweise zur Beschreibung von COM-Ereignissen verwendet wird.

Verbindungspunkte stellen die bidirektionale Kommunikation zwischen einem Client und einem Server in COM her. Mithilfe dieses Mechanismus kann ein COM-Server einen Client aufrufen, wenn ein Ereignis eintritt. Ein Server (z. B. Microsoft Internet Explorer) kann ein Ereignis auslösen, um seinem Clientprogramm eine bestimmte Änderung (z. B. eine Titeländerung) zu melden. Der Client erstellt ein internes COM-Objekt, die so genannte Ereignissenke, um auf eingehende Benachrichtigungen vorbereitet zu sein. Bei Empfang der Benachrichtigung kann der Client die mit dem Ereignis verknüpften Aktionen ausführen.

Eine Ereignissenke stellt eine Schnittstelle bereit, um dem Server ereignisbezogene Methoden verfügbar zu machen. Server lösen durch Aufruf dieser ereignisbezogenen Methoden Ereignisse aus. Der Client implementiert die Schnittstelle der Ereignissenke wie eine normale COM-Schnittstelle. Der Server deklariert die Schnittstelle als Ausgangsschnittstelle. Der Autor des COM-Servers wendet das source-Attribut auf die Schnittstelle in der Typbibliothek des COM-Servers an. Der Server verwendet Definitionen der Schnittstelle der Ereignissenke, um die Senke zu identifizieren und Methoden aufzurufen.

Ein COM-Client, der die Schnittstelle der Ereignissenke implementiert, wird häufig Ereignissenke oder einfach Senke genannt. In der folgenden Abbildung wird die ISinkEvents-Schnittstelle durch die Senke implementiert. Der Server, der dieses Ereignis auslöst, wird als Quelle bezeichnet.

Ereignismodell für einen Verbindungspunkt

COM-Ereignisse

Nachdem die Schnittstelle der Ereignissenke eingerichtet wurde, muss die Senke mit der Quelle verbunden werden. Dabei geht der Verbindungspunktmechanismus nach folgendem Protokoll zur Verbindung von Senke und Quelle vor:

  1. Die Senke fragt ein Serverobjekt nach der IConnectionPointContainer-Schnittstelle ab. Wenn das Objekt Verbindungspunkte unterstützt, gibt es einen Zeiger zurück.

  2. Durch Anwendung von Methoden auf das Containerobjekt findet die Senke die IConnectionPoint-Schnittstelle, die einen bestimmten Verbindungspunkt darstellt. Da ein Server mehrere Ausgangsschnittstellen unterstützt, muss der Client seine Senke mit dem Schnittstellenbezeichner (IID, Interface Identifier) einer bestimmten Verbindungspunktschnittstelle in Übereinstimmung bringen.

  3. Nach Erhalt des richtigen Verbindungspunktobjekts ruft die Senke IConnectionPoint::Advise auf, um ihren Schnittstellenzeiger zu registrieren. Der Server (Quelle) hält die Verbindung so lange (und löst dort Ereignisse aus), bis der Client die Verbindung durch den Aufruf von IConnectionPoint::Unadvise abbricht.

Visual Basic blendet die meisten Details der Verbindungspunkte aus. Sie müssen jedoch eine WithEvents-Direktive in die Serverdeklaration des Clients einfügen. In C++ muss der Clientcode für IConnectionPointContainer und IConnectionPoint Methoden anfragen und aufrufen. Der Server implementiert beide Schnittstellen.

Siehe auch

Aufgaben

Gewusst wie: Auslösen von Ereignissen, die von einem COM-Empfänger behandelt werden

Gewusst wie: Behandeln von Ereignissen, die durch eine COM-Quelle ausgelöst wurden

Weitere Ressourcen

Verwaltete und nicht verwaltete Ereignisse