Partilhar via


Usando IConnectionPointContainer

Um objeto conectável implementa IConnectionPointContainer (e o expõe por meio de QueryInterface) para indicar a existência de interfaces de saída. Para cada interface de saída, o objeto conectável gerencia um subobjeto de ponto de conexão, que implementa IConnectionPoint. O objeto conectável, portanto, contém os pontos de conexão, daí a nomeação de IConnectionPointContainer e IConnectionPoint.

Através IConnectionPointContainer , um cliente pode executar duas operações. Primeiro, se o cliente já tiver o IID para uma interface de saída suportada, ele poderá localizar o ponto de conexão correspondente para o IID usando IConnectionPointContainer::FindConnectionPoint. O cliente não pode consultar o ponto de conexão diretamente devido à relação contêiner/contido entre o objeto conectável e seus pontos de conexão contidos. Basicamente, FindConnectionPoint é o QueryInterface para interfaces de saída quando o IID é conhecido pelo cliente.

Em segundo lugar, o cliente pode enumerar todos os pontos de conexão dentro do objeto conectável por meio IConnectionPointContainer::EnumConnectionPoints. Esse método retorna um IEnumConnectionPoints ponteiro de interface para um objeto enumerador separado. Através IEnumConnectionPoints::Next, o cliente pode obter ponteiros de interface IConnectionPoint para cada ponto de conexão.

Depois que o cliente obtém o IConnectionPoint interface, ele deve chamar IConnectionPoint::GetConnectionInterface para determinar o IID da interface de saída suportada por cada ponto de conexão. Se o cliente já suporta essa interface de saída, ele pode estabelecer uma conexão. Caso contrário, ele ainda poderá oferecer suporte à interface de saída usando informações da biblioteca de tipos do objeto conectável para fornecer suporte em tempo de execução. Essa técnica requer que o objeto conectável suporte a interface IProvideClassInfo. (Consulte Usando IProvideClassInfo.)

Como o enumerador é um objeto separado, o cliente deve chamar IEnumConnectionPoints::Release quando o enumerador não for mais necessário. Além disso, cada ponto de conexão é um objeto com uma contagem de referência separada do objeto conectável no qual está contido. Portanto, o cliente também deve chamar IConnectionPoint::Release para cada ponto de conexão acessado através do enumerador ou através de FindConnectionPoint.

Interfaces de objeto conectáveis