Ereignisse in COM- und Verbindungsobjekten
Wenn ein Programm etwas erkennt, was passiert ist, kann es seine Clients benachrichtigen. Wenn ein Aktientickerprogramm beispielsweise eine Änderung des Preises einer Aktie erkennt, kann es alle Kunden über die Änderung benachrichtigen. Dieser Benachrichtigungsprozess wird als Auslösen eines Ereignisses bezeichnet.
Mit COM können Serverobjekte COM-Ereignisse verwenden, um Ereignisse ohne Informationen darüber, welche Objekte benachrichtigt werden, auszulösen. Objekte können auch verbindende Objekte verwenden, um detaillierte Informationen zu Clients zu verwalten, die Benachrichtigungen angefordert haben.
COM-verbindungsfähige Objekte stellen ihren Clients zusätzlich zu den eingehenden Schnittstellen ausgehende Schnittstellen bereit. Dadurch können Objekte und ihre Clients bidirektionale Kommunikation betreiben. Eingehende Schnittstellen werden für ein Objekt implementiert und empfangen Aufrufe von externen Clients eines Objekts, während ausgehende Schnittstellen auf der Senke des Clients implementiert werden und Aufrufe vom -Objekt empfangen. Das -Objekt definiert eine Schnittstelle, die es verwenden möchte, und der Client implementiert sie.
Ein -Objekt definiert seine eingehenden Schnittstellen und stellt Implementierungen dieser Schnittstellen bereit. Eingehende Schnittstellen sind für Clients über die IUnknown::QueryInterface-Methode des Objekts verfügbar. Clients rufen die Methoden einer eingehenden Schnittstelle für das Objekt auf, und das Objekt führt die gewünschten Aktionen im Namen des Clients aus.
Ausgehende Schnittstellen werden auch durch ein -Objekt definiert, aber der Client stellt die Implementierungen der ausgehenden Schnittstellen für ein Senkenobjekt bereit, das der Client erstellt. Das -Objekt ruft dann Methoden der ausgehenden Schnittstelle auf dem Senkenobjekt auf, um den Client über Änderungen am Objekt zu benachrichtigen, um Ereignisse im Client auszulösen, etwas vom Client anzufordern oder tatsächlich für einen beliebigen Zweck, den der Objektersteller benötigt.
Ein Beispiel für eine ausgehende Schnittstelle ist eine IButtonSink-Schnittstelle, die durch ein Schaltflächensteuerelement definiert wird, um seine Clients über seine Ereignisse zu benachrichtigen. Das Schaltflächenobjekt ruft beispielsweise IButtonSink::OnClick auf dem Senkenobjekt des Clients auf, wenn der Benutzer auf die Schaltfläche auf dem Bildschirm klickt. Das Schaltflächensteuerelement definiert die ausgehende Schnittstelle. Damit ein Client der Schaltfläche das Ereignis verarbeiten kann, muss der Client diese ausgehende Schnittstelle für ein Senkenobjekt implementieren und diese Senke dann mit dem Schaltflächensteuerelement verbinden. Wenn dann Ereignisse in der Schaltfläche auftreten, ruft die Schaltfläche die Senke auf. Zu diesem Zeitpunkt kann der Client die Aktion ausführen, die er diesem Schaltflächenklick zuweisen möchte.
Verbindebare Objekte bieten einen allgemeinen Mechanismus für die Objekt-zu-Client-Kommunikation. Jedes Objekt, das Ereignisse oder Benachrichtigungen jeglicher Art verfügbar machen möchte, kann diese Technologie verwenden. Zusätzlich zur allgemeinen verbindungsfähigen Objekttechnologie bietet COM viele spezielle Senken und Standortschnittstellen, die von Objekten verwendet werden, um Clients über bestimmte Ereignisse zu benachrichtigen, die für den Client von Interesse sind. Beispielsweise kann IAdviseSink von Objekten verwendet werden, um Clients über Daten zu benachrichtigen und Änderungen im Objekt anzuzeigen.
Weitere Informationen finden Sie in den folgenden Themen: