Korzystanie z interfejsu IConnectionPointContainer
Obiekt połączony implementuje IConnectionPointContainer (i uwidacznia go za pośrednictwem QueryInterface), aby wskazać istnienie interfejsów wychodzących. Dla każdego interfejsu wychodzącego obiekt umożliwiający połączenie zarządza obiektem podrzędnym punktu połączenia, który sam implementuje IConnectionPoint. Obiekt połączalny zawiera zatem punkty połączenia, stąd nazewnictwo IConnectionPointContainer i IConnectionPoint.
Za pomocą IConnectionPointContainerklient może wykonać dwie operacje. Po pierwsze, jeśli klient ma już identyfikator IID dla interfejsu wychodzącego, który obsługuje, może zlokalizować odpowiedni punkt połączenia dla identyfikatora IID przy użyciu IConnectionPointContainer::FindConnectionPoint. Klient nie może wykonywać zapytań o punkt połączenia bezpośrednio ze względu na relację kontenera/zawartego między obiektem połączonym a zawartymi w nim punktami połączenia. Zasadniczo FindConnectionPoint działa jak QueryInterface dla interfejsów wyjściowych, gdy identyfikator IID jest znany klientowi.
Po drugie, klient może wyliczyć wszystkie punkty połączenia w obiekcie połączonym za pośrednictwem IConnectionPointContainer::EnumConnectionPoints. Ta metoda zwraca wskaźnik interfejsu IEnumConnectionPoints dla oddzielnego obiektu wyliczającego. Za pośrednictwem IEnumConnectionPoints::Nextklient może uzyskać IConnectionPoint wskaźniki interfejsu do każdego punktu połączenia.
Gdy klient uzyska interfejs IConnectionPoint, musi wywołać IConnectionPoint::GetConnectionInterface, aby określić identyfikator IID interfejsu wychodzącego obsługiwanego przez każdy punkt połączenia. Jeśli klient obsługuje już ten interfejs wychodzący, może nawiązać połączenie. W przeciwnym razie nadal może być w stanie obsługiwać interfejs wychodzący przy użyciu informacji z biblioteki typów obiektu, które można połączyć, aby zapewnić obsługę w czasie wykonywania. Ta technika wymaga, aby obiekt połączony obsługiwał interfejsIProvideClassInfo. (Zobacz używając IProvideClassInfo.)
Ponieważ moduł wyliczający jest oddzielnym obiektem, klient musi wywołać IEnumConnectionPoints::Release, gdy moduł wyliczający nie jest już potrzebny. Ponadto każdy punkt połączenia jest obiektem z oddzielną liczbą odwołań od obiektu łączącego się. W związku z tym klient musi również wywołać funkcję IConnectionPoint::Release dla każdego punktu połączenia dostępnego za pośrednictwem modułu wyliczającego lub za pośrednictwem FindConnectionPoint.
Tematy pokrewne
-
interfejsy obiektów connectable