IConnectionPointContainer gebruiken
Een verbindend object implementeert IConnectionPointContainer (en maakt het beschikbaar via QueryInterface) om aan te geven dat er uitgaande interfaces bestaan. Voor elke uitgaande interface beheert het koppelbare object een subobject van het verbindingspunt, dat zelf IConnectionPoint-implementeert. Het koppelbare object bevat daarom de verbindingspunten, vandaar de naamgeving van IConnectionPointContainer en IConnectionPoint.
Via IConnectionPointContainerkan een client twee bewerkingen uitvoeren. Als de client de IID al heeft voor een uitgaande interface die wordt ondersteund, kan het bijbehorende verbindingspunt voor de IID worden gevonden met behulp van IConnectionPointContainer::FindConnectionPoint. De client kan niet rechtstreeks een query uitvoeren op het verbindingspunt vanwege de container-/ingesloten relatie tussen het verbindingsobject en de bijbehorende ingesloten verbindingspunten. In principe is FindConnectionPoint- de QueryInterface- voor uitgaande interfaces wanneer de IID bekend is bij de client.
Ten tweede kan de client alle verbindingspunten binnen het koppelbare object inventariseren via IConnectionPointContainer::EnumConnectionPoints. Deze methode retourneert een IEnumConnectionPoints interfaceaanwijzer voor een afzonderlijk enumerator-object. Via IEnumConnectionPoints::Nextkan de client IConnectionPoint interface-aanwijzers naar elk verbindingspunt verkrijgen.
Nadat de client de IConnectionPoint interface heeft verkregen, moet deze IConnectionPoint::GetConnectionInterface aanroepen om de IID van de uitgaande interface te bepalen die door elk verbindingspunt wordt ondersteund. Als de client deze uitgaande interface al ondersteunt, kan er een verbinding tot stand worden gebracht. Anders kan de uitgaande interface mogelijk nog steeds worden ondersteund met behulp van informatie uit de typebibliotheek van het verbindingsbare object om ondersteuning te bieden tijdens runtime. Deze techniek vereist dat het koppelbare object de interface IProvideClassInfo ondersteunt. (Zie Het gebruik van IProvideClassInfo.)
Omdat de enumerator een afzonderlijk object is, moet de client IEnumConnectionPoints::Release aanroepen wanneer de enumerator niet meer nodig is. Bovendien is elk verbindingspunt een object met een eigen referentietelling ten opzichte van het koppelbare object. Daarom moet de client ook IConnectionPoint::Release aanroepen voor elk verbindingspunt dat toegankelijk is via de enumerator of via FindConnectionPoint.
Verwante onderwerpen