Freigeben über


Architektur von verbindebaren Objekten

Das zu verbindende Objekt ist nur ein Teil der Gesamtarchitektur von verbindungsfähigen Objekten. Diese Technologie umfasst die folgenden Elemente:

  • Anschließbares Objekt. Implementiert die IConnectionPointContainer-Schnittstelle ; erstellt mindestens ein Verbindungspunktobjekt; definiert eine ausgehende Schnittstelle für den Client.
  • Kunde. Fragt das Objekt nach IConnectionPointContainer ab, um zu bestimmen, ob das Objekt verbunden ist. erstellt ein Senkenobjekt, um die ausgehende Schnittstelle zu implementieren, die durch das zu verbindende Objekt definiert wird.
  • Senkenobjekt. Implementiert die ausgehende Schnittstelle; wird verwendet, um eine Verbindung mit dem zu verbindenden Objekt herzustellen.
  • Verbindungspunktobjekt. Implementiert die IConnectionPoint-Schnittstelle und verwaltet die Verbindung mit der Senke des Clients.

Die Beziehungen zwischen Client, verbindungsbarem Objekt, einem Verbindungspunkt und einer Senke werden im folgenden Diagramm veranschaulicht:

Diagramm, das die Verbindungspunkte zwischen dem Client und dem Connectable Object zeigt.

Bevor das Verbindungspunktobjekt Methoden in der Senkenschnittstelle in Schritt 3 des vorherigen Diagramms aufruft, muss es QueryInterface für die erforderliche spezifische Schnittstelle verwenden, auch wenn der Zeiger bereits im Schritt 2-Aufruf der Advise-Methode übergeben wurde.

Zwei Enumeratorobjekte sind auch an dieser Architektur beteiligt, die in der Abbildung nicht dargestellt sind. Eine wird von einer Methode in IConnectionPointContainer erstellt, um die Verbindungspunkte innerhalb des zu verbindenden Objekts aufzulisten. Die andere wird von einer Methode in IConnectionPoint erstellt, um die derzeit mit diesem Verbindungspunkt hergestellten Verbindungen aufzulisten. Ein Verbindungspunkt kann mehrere verbundene Senkenschnittstellen unterstützen, und er sollte die Liste der Verbindungen jedes Mal durchlaufen, wenn er einen Methodenaufruf für diese Schnittstelle ausgibt. Dieser Prozess wird als Multicasting bezeichnet.

Bei der Arbeit mit verbindungsbaren Objekten ist es wichtig zu verstehen, dass das verbindungsbare Objekt, jeder Verbindungspunkt, jede Senke und alle Enumeratoren separate Objekte mit separaten IUnknown-Implementierungen , separaten Verweisanzahlen und separaten Lebensdauern sind. Ein Client, der diese Objekte verwendet, ist immer für die Freigabe aller Verweisanzahlen verantwortlich, die er besitzt.

Hinweis

Ein anschließbares Objekt kann mehr als einen Client unterstützen und mehrere Senken innerhalb eines Clients unterstützen. Ebenso kann eine Senke mit mehr als einem zu verbindenden Objekt verbunden werden.

 

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

  1. Der Client fragt nach IConnectionPointContainer für das Objekt ab, um zu bestimmen, ob das Objekt verbunden ist. Wenn dieser Aufruf erfolgreich ist, enthält der Client einen Zeiger auf die IConnectionPointContainer-Schnittstelle auf dem verbindenden Objekt, und der Verweiszähler für verbindende Objekte wurde inkrementiert. Andernfalls kann das Objekt nicht verbunden werden und unterstützt keine ausgehenden Schnittstellen.
  2. Wenn das Objekt verbunden ist, versucht der Client als nächstes, einen Zeiger auf die IConnectionPoint-Schnittstelle an 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 verbindende Objekt und der Client dieselbe ausgehende Schnittstelle. Das zu verbindende Objekt definiert es und ruft es auf, und der Client implementiert es. Der Client kann dann über den Verbindungspunkt innerhalb des zu verbindenden Objekts kommunizieren.
  3. Der Client ruft dann Advise für den Verbindungspunkt auf, um eine Verbindung zwischen der Senkeschnittstelle und dem Verbindungspunkt des Objekts herzustellen. Nach diesem Aufruf enthält der Verbindungspunkt des Objekts einen Zeiger auf die ausgehende Schnittstelle an der Senke.
  4. Der Code in Advise ruft QueryInterface auf dem übergebenen Schnittstellenzeiger auf, und fragt nach dem spezifischen Schnittstellenbezeichner, mit dem eine Verbindung hergestellt wird.
  5. Das -Objekt ruft bei Bedarf Methoden auf der Schnittstelle der Senke auf, wobei der Zeiger verwendet wird, der vom Verbindungspunkt gehalten wird.
  6. Der Client ruft Unadvise auf, um die Verbindung zu beenden. Anschließend ruft der Client IConnectionPoint::Release auf, um den Haltepunkt und damit auch das Standard zu verbindenden Objekt freizugeben. Der Client muss auch IConnectionPointContainer::Release aufrufen, um den Haltepunkt für das Standard zu verbindenden Objekt freizugeben.

Verbindebare Objektschnittstellen