Partilhar via


Usando objetos de callback

Há três interfaces COM de callback que são usadas pelo motor: IDebugEventCallbacks para notificar extensões de depurador e aplicações sobre alterações no motor ou no alvo, IDebugInputCallbacks para solicitar entrada e IDebugOutputCallbacks para enviar saída.

Os objetos de retorno de chamada são registados junto dos clientes. No máximo, uma instância de cada uma das três interfaces de retorno de chamada pode ser registrada com cada cliente (as versões Unicode e ASCII de uma interface contam como a mesma interface).

Quando um cliente é criado, o mecanismo se lembra do thread no qual ele foi criado. O mecanismo usa esta mesma linha de execução sempre que faz uma chamada para uma instância de retorno de chamada registada com o cliente. Se a linha de execução estiver em uso, o mecanismo enfileirará as chamadas que precisa fazer. Para permitir que o mecanismo faça essas chamadas, o método DispatchCallbacks deve ser chamado sempre que o thread de um cliente estiver ocioso. O método ExitDispatch fará com que DispatchCallbacks retorne. Se o thread for o mesmo que foi utilizado para iniciar a sessão do depurador, então o motor pode realizar os callbacks durante o método WaitForEvent e DispatchCallbacks não precisa ser chamado.

O método FlushCallbacks diz ao motor para enviar toda a saída em buffer para os callbacks de saída.

Objetos de retorno de chamada de evento

A interface IDebugEventCallbacks é usada pelo motor para notificar as extensões e aplicações do depurador sobre eventos e alterações no motor e no alvo. Uma implementação de IDebugEventCallbacks pode ser registrada com um cliente usando SetEventCallbacks. A implementação atual registrada com um cliente pode ser encontrada usando GetEventCallbacks. O número de callbacks de eventos registados em todos os clientes pode ser encontrado usando GetNumberEventCallbacks.

Para obter detalhes sobre como o mecanismo gerencia eventos, consulte Monitorando eventos.

Objetos de Callback de Entrada

A interface IDebugInputCallbacks é usada pelo mecanismo para solicitar entrada de extensões e aplicativos do depurador. Uma implementação de IDebugInputCallbacks pode ser registrada com um cliente usando SetInputCallbacks. A implementação atual registrada com um cliente pode ser encontrada usando GetInputCallbacks. O número de callbacks de entrada registados em todos os clientes pode ser encontrado usando GetNumberInputCallbacks.

Para obter detalhes sobre como o mecanismo gerencia a entrada, consulte Entrada e saída.

Objetos de retorno de chamada de saída

A interface IDebugOutputCallbacks é usada pelo mecanismo para enviar saída para as extensões e aplicativos do depurador. Uma implementação de IDebugOutputCallbacks pode ser registrada com um cliente usando SetOutputCallbacks. A implementação atual registrada com um cliente pode ser encontrada usando GetOutputCallbacks. O número de callbacks de saída registados para todos os clientes pode ser encontrado usando GetNumberOutputCallbacks.

Para obter detalhes sobre como o mecanismo gerencia a saída, consulte Entrada e saída.

Observação Como é típico para objetos COM, o mecanismo chamará IUnknown::AddRef em um objeto COM de retorno de chamada quando ele estiver registrado com um cliente e IUnknown::Release quando o objeto for substituído ou o cliente for excluído.