Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O objeto conectável é apenas uma parte da arquitetura geral de objetos conectáveis. Esta tecnologia inclui os seguintes elementos:
- Objeto conectável. Implementa o IConnectionPointContainer interface; cria pelo menos um objeto de ponto de conexão; Define uma interface de saída para o cliente.
- Cliente. Consulta o objeto para IConnectionPointContainer para determinar se o objeto é conectável; Cria um objeto de coletor para implementar a interface de saída definida pelo objeto conectável.
- Objeto do coletor. Implementa a interface de saída; usado para estabelecer uma conexão com o objeto conectável.
- Objeto de ponto de conexão. Implementa o interface IConnectionPoint e gerencia a conexão com o coletor do cliente.
As relações entre cliente, objeto conectável, um ponto de conexão e um coletor são ilustradas no diagrama a seguir:
Antes que o objeto de ponto de conexão chame métodos na interface do coletor na etapa 3 do diagrama anterior, ele deve QueryInterface para a interface específica necessária, mesmo que o ponteiro já tenha sido passado na chamada da etapa 2 para o método Advise.
Dois objetos enumeradores também estão envolvidos nessa arquitetura, embora não sejam mostrados na ilustração. Um é criado por um método em IConnectionPointContainer enumerar os pontos de conexão dentro do objeto conectável. O outro é criado por um método em IConnectionPoint para enumerar as conexões atualmente estabelecidas para esse ponto de conexão. Um ponto de conexão pode suportar várias interfaces de coletor conectadas e deve iterar através da lista de conexões cada vez que faz uma chamada de método nessa interface. Este processo é conhecido como multicasting.
Ao trabalhar com objetos conectáveis, é importante entender que o objeto conectável, cada ponto de conexão, cada coletor e todos os enumeradores são objetos separados com implementações IUnknown separadas, contagens de referência separadas e tempos de vida separados. Um cliente que usa esses objetos é sempre responsável por liberar todas as contagens de referência que possui.
Observação
Um objeto conectável pode suportar mais de um cliente e pode suportar vários coletores dentro de um cliente. Da mesma forma, um coletor pode ser conectado a mais de um objeto conectável.
As etapas para estabelecer uma conexão entre um cliente e um objeto conectável são as seguintes:
- O cliente consulta IConnectionPointContainer no objeto para determinar se o objeto é conectável. Se essa chamada for bem-sucedida, o cliente mantém um ponteiro para o IConnectionPointContainer interface no objeto conectável e o contador de referência de objeto conectável foi incrementado. Caso contrário, o objeto não é conectável e não suporta interfaces de saída.
- Se o objeto for conectável, o cliente tentará em seguida obter um ponteiro para o IConnectionPoint interface em um ponto de conexão dentro do objeto conectável. Há dois métodos para obter esse ponteiro, IConnectionPointContainer::FindConnectionPoint e em IConnectionPointContainer::EnumConnectionPoints. Há algumas etapas adicionais necessárias se EnumConnectionPoints for usado. (Consulte Usando o IConnectionPointContainer para obter mais informações.) Se bem-sucedido, o objeto conectável e o cliente suportam a mesma interface de saída. O objeto conectável o define e o chama, e o cliente o implementa. O cliente pode então se comunicar através do ponto de conexão dentro do objeto conectável.
- Em seguida, o cliente chama Advise no ponto de conexão para estabelecer uma conexão entre sua interface de coletor e o ponto de conexão do objeto. Após essa chamada, o ponto de conexão do objeto mantém um ponteiro para a interface de saída no coletor.
- O código dentro Advise chama QueryInterface no ponteiro da interface que é passado, solicitando o identificador de interface específico ao qual ele se conecta.
- O objeto chama métodos na interface do coletor conforme necessário, usando o ponteiro mantido por seu ponto de conexão.
- O cliente liga para Desaconselhar para encerrar a conexão. Em seguida, o cliente chama IConnectionPoint::Release para liberar sua retenção no ponto de conexão e, portanto, o objeto conectável principal também. O cliente também deve chamar IConnectionPointContainer::Release para liberar sua retenção no objeto conectável principal.
Tópicos relacionados