Verwenden von IConnectionPointContainer
Ein miteinander verbundenes Objekt implementiert IConnectionPointContainer (und macht es über QueryInterface verfügbar), um das Vorhandensein ausgehender Schnittstellen anzugeben. Für jede ausgehende Schnittstelle verwaltet das verbindungsfähige Objekt ein Unterobjekt des Verbindungspunkts, das selbst IConnectionPoint implementiert. Das verbindungsfähige Objekt enthält daher die Verbindungspunkte, daher die Benennung von IConnectionPointContainer und IConnectionPoint.
Über IConnectionPointContainer kann ein Client zwei Vorgänge ausführen. Wenn der Client bereits über die IID für eine ausgehende Schnittstelle verfügt, die er unterstützt, kann er den entsprechenden Verbindungspunkt für die IID mithilfe von IConnectionPointContainer::FindConnectionPoint suchen. Der Client kann den Verbindungspunkt aufgrund der Container-/Eigenständigen Beziehung zwischen dem verbindungsfähigen Objekt und seinen enthaltenen Verbindungspunkten nicht direkt abfragen. Im Grunde ist FindConnectionPoint die QueryInterface für ausgehende Schnittstellen, wenn die IID dem Client bekannt ist.
Zweitens kann der Client alle Verbindungspunkte innerhalb des verbindungsfähigen Objekts über IConnectionPointContainer::EnumConnectionPoints auflisten. Diese Methode gibt einen IEnumConnectionPoints-Schnittstellenzeiger für ein separates Enumeratorobjekt zurück. Über IEnumConnectionPoints::Next kann der Client IConnectionPoint-Schnittstellenzeiger auf jeden Verbindungspunkt abrufen.
Nachdem der Client die IConnectionPoint-Schnittstelle abgerufen hat, muss er IConnectionPoint::GetConnectionInterface aufrufen, um die IID der ausgehenden Schnittstelle zu bestimmen, die von jedem Verbindungspunkt unterstützt wird. Wenn der Client diese ausgehende Schnittstelle bereits unterstützt, kann er eine Verbindung herstellen. Andernfalls kann die ausgehende Schnittstelle möglicherweise weiterhin unterstützt werden, indem Informationen aus der Typbibliothek des verbindungsfähigen Objekts verwendet werden, um zur Laufzeit Unterstützung bereitzustellen. Diese Technik erfordert, dass das zu verbindende Objekt die IProvideClassInfo-Schnittstelle unterstützt. (Siehe Verwenden von IProvideClassInfo.)
Da der Enumerator ein separates Objekt ist, muss der Client IEnumConnectionPoints::Release aufrufen, wenn der Enumerator nicht mehr benötigt wird. Darüber hinaus ist jeder Verbindungspunkt ein Objekt mit einer separaten Verweisanzahl vom enthaltenden verbindungsfähigen Objekt. Daher muss der Client auch IConnectionPoint::Release für jeden Verbindungspunkt aufrufen, auf den entweder über den Enumerator oder über FindConnectionPoint zugegriffen wird.
Zugehörige Themen