Eventos em OBJETOS COM e Conectáveis
Quando um programa detecta algo que aconteceu, ele pode notificar seus clientes. Por exemplo, se um programa de escala 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 disparar um evento.
Com o COM, os objetos de servidor podem usar eventos COM para disparar eventos sem nenhuma informação sobre quais objetos serão notificados. Os objetos também podem usar objetos conectáveis para manter informações detalhadas sobre clientes que solicitaram notificações.
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 clientes por meio do métodoIUnknown::QueryInterface do objeto. Os clientes chamam os métodos de uma interface de entrada no objeto e o objeto executa 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 de coletor que o cliente cria. Em seguida, o objeto chama métodos da interface de saída no objeto do coletor para notificar o cliente sobre as alterações no objeto, para disparar eventos no cliente, para solicitar algo do cliente ou, de fato, para qualquer finalidade que o criador do objeto aparecer.
Um exemplo de uma interface de saída é uma interface IButtonSink definida por um controle de botão push 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 um cliente do botão manipular o evento, o cliente deve implementar essa interface de saída em um objeto de 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 botão.
Objetos conectáveis fornecem um mecanismo geral para comunicação objeto a cliente. Qualquer objeto que deseje expor eventos ou notificações de qualquer tipo pode usar essa tecnologia. Além da tecnologia de objeto conectável geral, o COM fornece muitas interfaces de site e coletor de finalidade especial usadas por objetos para notificar os clientes sobre eventos específicos de interesse para o cliente. Por exemplo, IAdviseSink podem ser usados por objetos para notificar os clientes sobre dados e exibir alterações no objeto.
Para obter mais informações, consulte os seguintes tópicos: