Teilen über


Architektur von verbindebaren Objekten

Das verbindebare Objekt ist nur ein Teil der Gesamtarchitektur von verbindebaren Objekten. Diese Technologie umfasst die folgenden Elemente:

  • Verbindebares Objekt. Implementiert die IConnectionPointContainer--Schnittstelle; erstellt mindestens ein Verbindungspunktobjekt; definiert eine ausgehende Schnittstelle für den Client.
  • Kunde. Fragt das Objekt für IConnectionPointContainer- ab, um zu bestimmen, ob das Objekt verbunden werden kann; erstellt ein Sinkobjekt, um die ausgehende Schnittstelle zu implementieren, die durch das verbindebare Objekt definiert wird.
  • Sink-Objekt. Implementiert die ausgehende Schnittstelle; wird verwendet, um eine Verbindung mit dem verbindebaren Objekt herzustellen.
  • Connection Point-Objekt. Implementiert die IConnectionPoint Schnittstelle und verwaltet die Verbindung mit der Spüle des Clients.

Die Beziehungen zwischen Client, verbindungsfähigem Objekt, einem Verbindungspunkt und einer Spüle werden im folgenden Diagramm veranschaulicht:

Diagramm, das die Verbindungspunkte zwischen client- und connectable-Objekt anzeigt.

Bevor das Verbindungspunktobjekt Methoden in der Sinkschnittstelle in Schritt 3 im vorherigen Diagramm aufruft, muss es QueryInterface- für die erforderliche schnittstelle, auch wenn der Zeiger bereits im Schritt 2-Aufruf der Advise-Methode übergeben wurde.

Zwei Enumeratorobjekte sind ebenfalls an dieser Architektur beteiligt, jedoch nicht in der Abbildung dargestellt. Eine wird von einer Methode in IConnectionPointContainer- erstellt, um die Verbindungspunkte innerhalb des verbindungsfähigen Objekts aufzählen zu können. Die andere wird von einer Methode in IConnectionPoint erstellt, um die derzeit mit diesem Verbindungspunkt eingerichteten Verbindungen auflisten zu können. Ein Verbindungspunkt kann mehrere verbundene Senkenschnittstellen unterstützen und sollte bei jedem Aufruf einer Methode auf dieser Schnittstelle durch die Liste der Verbindungen durchlaufen werden. Dieser Prozess wird als Multicasting bezeichnet.

Beim Arbeiten mit verbindebaren Objekten ist es wichtig zu verstehen, dass das verbindungsfähige Objekt, jeder Verbindungspunkt, jede Spüle und alle Enumerationen separate Objekte mit separaten IUnknown Implementierungen, separate Verweisanzahlen und separate Lebensdauern sind. Ein Client, der diese Objekte verwendet, ist immer dafür verantwortlich, alle Referenzanzahlen freizugeben, die er besitzt.

Anmerkung

Ein verbindebares Objekt kann mehrere Clients unterstützen und mehrere Senken innerhalb eines Clients unterstützen. Ebenso kann eine Spüle mit mehr als einem verbindebaren Objekt verbunden werden.

 

Die Schritte zum Herstellen einer Verbindung zwischen einem Client und einem verbindebaren Objekt sind wie folgt:

  1. Der Client fragt IConnectionPointContainer für das Objekt ab, um zu bestimmen, ob das Objekt verbunden werden kann. Wenn dieser Aufruf erfolgreich ist, enthält der Client einen Zeiger auf die IConnectionPointContainer Schnittstelle auf dem verbindebaren Objekt, und der verbindungsfähige Objektverweiszähler wurde erhöht. Andernfalls kann das Objekt nicht verbunden werden und unterstützt keine ausgehenden Schnittstellen.
  2. Wenn das Objekt verbunden werden kann, versucht der Client als Nächstes, einen Zeiger auf die IConnectionPoint- Schnittstelle auf einem Verbindungspunkt innerhalb des verbindungsfähigen Objekts abzurufen. Es gibt zwei Methoden zum Abrufen dieses Zeigers, sowohl in IConnectionPointContainer::FindConnectionPoint als auch in IConnectionPointContainer::EnumConnectionPoints. Es sind einige zusätzliche Schritte erforderlich, wenn EnumConnectionPoints- verwendet wird. (Weitere Informationen finden Sie unter Verwenden von IConnectionPointContainer-.) Bei erfolgreicher Ausführung unterstützen das verbindungsfähige Objekt und der Client die gleiche ausgehende Schnittstelle. Das verbindungsfähige Objekt definiert es und ruft es auf, und der Client implementiert es. Der Client kann dann über den Verbindungspunkt innerhalb des verbindebaren Objekts kommunizieren.
  3. Der Client ruft dann Advise auf dem Verbindungspunkt auf, um eine Verbindung zwischen seiner Senkenschnittstelle und dem Verbindungspunkt des Objekts herzustellen. Nach diesem Aufruf enthält der Verbindungspunkt des Objekts einen Zeiger auf die ausgehende Schnittstelle auf der Spüle.
  4. Der Code in Advise ruft QueryInterface- auf dem schnittstellenzeiger übergebenen Schnittstellenzeiger auf und fordert den spezifischen Schnittstellenbezeichner an, mit dem er eine Verbindung herstellt.
  5. Das Objekt ruft bei Bedarf Methoden auf der Spüleschnittstelle auf, wobei der Zeiger, der von seinem Verbindungspunkt gehalten wird, verwendet wird.
  6. Der Client ruft Unadvise- auf, um die Verbindung zu beenden. Anschließend ruft der Client IConnectionPoint::Release auf, um den Haltepunkt des Verbindungspunkts freizugeben und daher auch das hauptverbindungsfähige Objekt. Der Client muss auch IConnectionPointContainer::Release aufrufen, um den Haltepunkt für das hauptverbindungsfähige Objekt freizugeben.

verbindende Objektschnittstellen