Compartilhar 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 de IConnectionPointContainer, um cliente pode executar duas operações. Primeiro, se o cliente já tiver o IID para uma interface de saída que ele suporta, 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/contida 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 de IConnectionPointContainer::EnumConnectionPoints. Esse método retorna um ponteiro de interface IEnumConnectionPoints para um objeto enumerador separado. Através de IEnumConnectionPoints::Next, o cliente pode obter ponteiros de interface IConnectionPoint para cada ponto de conexão.

Depois que o cliente obtém a interface IConnectionPoint, 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á oferecer suporte a essa interface de saída, ele poderá 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 ofereça suporte à interface IProvideClassInfo. (Veja Usando IProvideClassInfo.)

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

Interfaces de objetos conectáveis