Compartilhar via


Eventos em COM e objetos conectáveis

Quando um programa detecta algo que aconteceu, ele pode notificar seus clientes. Por exemplo, se um programa de cotação de ações detectar uma alteração no preço de uma ação, ele poderá notificar todos os clientes sobre a alteração. Esse processo de notificação é conhecido como disparo de um evento.

Com COM, os objetos de servidor podem usar eventos COM para disparar eventos sem qualquer informação sobre quais objetos serão notificados. Os objetos também podem usar objetos conectáveis para manter informações detalhadas sobre os clientes que solicitaram notificações.

Os objetos conectáveis COM fornecem interfaces de saída para seus clientes, além de suas interfaces de entrada. Como resultado, os objetos e seus clientes podem se envolver em comunicação bidirecional. As interfaces de entrada são implementadas em um objeto e recebem chamadas de clientes externos de um objeto, enquanto as interfaces de saída são implementadas no coletor do cliente e recebem chamadas do objeto. O objeto define uma interface que gostaria de usar e o cliente a implementa.

Um objeto define suas interfaces de entrada e fornece implementações dessas interfaces. As interfaces de entrada estão disponíveis para os clientes por meio do método IUnknown::QueryInterface do objeto. Os clientes chamam os métodos de uma interface de entrada no objeto e o objeto executa as ações desejadas em nome do cliente.

As interfaces de saída também são definidas por um objeto, mas o cliente fornece as implementações das interfaces de saída em um objeto coletor que o cliente cria. Em seguida, o objeto chama métodos da interface de saída no objeto coletor para notificar o cliente sobre alterações no objeto, para disparar eventos no cliente, para solicitar algo do cliente ou, na verdade, para qualquer finalidade que o criador do objeto apresente.

Um exemplo de uma interface de saída é uma interface IButtonSink definida por um controle de botão para notificar seus clientes de seus eventos. Por exemplo, o objeto de botão chama IButtonSink::OnClick no objeto de coletor do cliente quando o usuário clica no botão na tela. O controle de botão define a interface de saída. Para que um cliente do botão manipule o evento, o cliente deve implementar essa interface de saída em um objeto coletor e, em seguida, conectar esse coletor ao controle de botão. Em seguida, quando ocorrerem eventos no botão, o botão chamará o coletor, momento em que o cliente poderá executar qualquer ação que desejar atribuir a esse clique no botão.

Os objetos conectáveis fornecem um mecanismo geral para comunicação objeto-cliente. Qualquer objeto que deseje expor eventos ou notificações de qualquer tipo pode usar essa tecnologia. Além da tecnologia geral de objetos conectáveis, o COM fornece muitas interfaces de site e coletor de propósito especial usadas por objetos para notificar os clientes de eventos específicos de interesse do cliente. Por exemplo, IAdviseSink pode ser usado por objetos para notificar os clientes de dados e exibir alterações no objeto.

Para Mais informações, consulte os seguintes tópicos: