Usando objetos de retorno de chamada

Há três COM de retorno de chamada como interfaces usadas pelo mecanismo: IDebugEventCallbacks para notificar extensões de depurador e aplicativos de alterações no mecanismo ou destino, IDebugInputCallbacks para solicitar entrada e IDebugOutputCallbacks para enviar saída.

Objetos de retorno de chamada são registrados com 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 contagem de interface como a mesma interface).

Quando um cliente é criado, o mecanismo se lembra do thread no qual ele foi criado. O mecanismo usa esse mesmo thread sempre que faz uma chamada para uma instância de retorno de chamada registrada com o cliente. Se o thread 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 thread usado para iniciar a sessão do depurador, o mecanismo poderá fazer as chamadas de retorno de chamada durante o método WaitForEvent e DispatchCallbacks não precisará ser chamado.

O método FlushCallbacks informa ao mecanismo para enviar todas as saídas em buffer para os retornos de chamada de saída.

Objetos de retorno de chamada de evento

A interface IDebugEventCallbacks é usada pelo mecanismo para notificar as extensões e aplicativos do depurador de eventos e alterações no mecanismo e no destino. 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 retornos de chamada de evento registrados em todos os clientes pode ser encontrado usando GetNumberEventCallbacks.

Para obter detalhes sobre como o mecanismo gerencia eventos, consulte Eventos de monitoramento.

Objetos de retorno de chamada de entrada

A interface IDebugInputCallbacks é usada pelo mecanismo para solicitar a 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 retornos de chamada de entrada registrados 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 retornos de chamada de saída registrados em todos os clientes pode ser encontrado usando GetNumberOutputCallbacks.

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

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