Dela via


Använda IConnectionPointContainer

Ett anslutningsbart objekt implementerar IConnectionPointContainer (och exponerar det via QueryInterface) för att indikera förekomsten av utgående gränssnitt. För varje utgående gränssnitt hanterar det anslutningsbara objektet ett underobjekt för anslutningspunkten, som i sig implementerar IConnectionPoint-. Det anslutningsbara objektet innehåller därför anslutningspunkterna, därav namngivningen av IConnectionPointContainer och IConnectionPoint.

Via IConnectionPointContainerkan en klient utföra två åtgärder. Om klienten redan har IID för ett utgående gränssnitt som den stöder kan den först hitta motsvarande anslutningspunkt för IID med hjälp av IConnectionPointContainer::FindConnectionPoint. Klienten kan inte fråga efter anslutningspunkten direkt på grund av den container-/inneslutna relationen mellan det anslutningsbara objektet och dess inneslutna anslutningspunkter. I grund och botten är FindConnectionPointQueryInterface- för utgående gränssnitt när IID är känt för klienten.

För det andra kan klienten räkna upp alla anslutningspunkter i det anslutningsbara objektet via IConnectionPointContainer::EnumConnectionPoints. Den här metoden returnerar en IEnumConnectionPoints gränssnittspekare för ett separat uppräkningsobjekt. Via IEnumConnectionPoints::Nextkan klienten erhålla IConnectionPoint gränssnittspekare till varje anslutningspunkt.

När klienten har hämtat gränssnittet IConnectionPoint måste den anropa IConnectionPoint::GetConnectionInterface för att fastställa IID för det utgående gränssnitt som stöds av varje anslutningspunkt. Om klienten redan stöder det utgående gränssnittet kan den upprätta en anslutning. Annars kanske det fortfarande kan stödja det utgående gränssnittet med hjälp av information från det anslutningsbara objektets typbibliotek för att ge stöd vid körning. Den här tekniken kräver att det anslutningsbara objektet stöder gränssnittet IProvideClassInfo. (Se Använda IProvideClassInfo.)

Eftersom uppräknaren är ett separat objekt måste klienten anropa IEnumConnectionPoints::Release när uppräknaren inte längre behövs. Dessutom är varje anslutningspunkt ett objekt med ett separat referensantal från det som innehåller det anslutningsbara objektet. Därför måste klienten även anropa IConnectionPoint::Release för varje anslutningspunkt som nås antingen via uppräknaren eller via FindConnectionPoint.

anslutningsbara objektgränssnitt