Číst v angličtině

Sdílet prostřednictvím


Použití IConnectionPointContainer

Připojitelný objekt implementuje IConnectionPointContainer (a zpřístupňuje ho prostřednictvím QueryInterface) k označení existence odchozích rozhraní. Pro každé odchozí rozhraní spravuje připojitelný objekt dílčí objekt spojovacího bodu, který sám implementuje IConnectionPoint. Připojitelný objekt proto obsahuje spojovací body, a proto pojmenování IConnectionPointContainer a IConnectionPoint.

Prostřednictvím IConnectionPointContainermůže klient provádět dvě operace. Za prvé, pokud klient již má IID pro odchozí rozhraní, které podporuje, může najít odpovídající spojovací bod pro IID pomocí IConnectionPointContainer::FindConnectionPoint. Klient se nemůže dotazovat na spojovací bod přímo kvůli kontejneru nebo obsaženému vztahu mezi připojitelným objektem a jeho obsaženými spojovacími body. V podstatě FindConnectionPoint je QueryInterface pro odchozí rozhraní, když je identifikátor IID známý klientovi.

Za druhé může klient vytvořit výčet všech spojovacích bodů v rámci připojitelného objektu prostřednictvím IConnectionPointContainer::EnumConnectionPoints. Tato metoda vrátí ukazatel na rozhraní IEnumConnectionPoints pro samostatný objekt enumerátoru. Prostřednictvím IEnumConnectionPoints::Nextmůže klient získat IConnectionPoint ukazatele rozhraní na každý spojovací bod.

Jakmile klient získá rozhraní IConnectionPoint, musí volat IConnectionPoint::GetConnectionInterface, aby určil IID odchozího rozhraní podporovaného každým spojovacím bodem. Pokud klient již toto odchozí rozhraní podporuje, může navázat připojení. Jinak může být stále možné podporovat odchozí rozhraní pomocí informací z knihovny typů připojitelného objektu k poskytování podpory za běhu. Tato technika vyžaduje, aby připojitelný objekt podporoval rozhraní IProvideClassInfo. (Viz použití IProvideClassInfo.)

Vzhledem k tomu, že enumerátor je samostatný objekt, klient musí volat IEnumConnectionPoints::Release, pokud už není enumerátor potřeba. Každý spojovací bod je navíc objekt se samostatným počtem odkazů od obsahujícího propojitelného objektu. Klient proto musí také volat IConnectionPoint::Release pro každý spojovací bod, ke kterému přistupoval buď prostřednictvím enumerátoru, nebo prostřednictvím FindConnectionPoint.

připojitelná rozhraní objektů