Usar objetos de retorno de chamada
Há três interfaces COM de retorno de chamada que são usadas pelo mecanismo: IDebugEventCallbacks para notificar extensões do depurador e aplicativos de alterações no mecanismo ou destino, IDebugInputCallbacks para solicitar entrada e IDebugOutputCallbacks para enviar saída.
Os 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 interface contam como a mesma interface).
Quando um cliente é criado, o mecanismo lembra o 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 colocará na fila as chamadas que precisam ser feitas. Para permitir que o mecanismo faça essas chamadas, o método DispatchCallbacks deverá ser chamado sempre que o thread de um cliente estiver ocioso. O método ExitDispatch fará com que DispatchCallbacks seja retornado. Se o thread for o mesmo 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 diz ao mecanismo para enviar toda a saída 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 os aplicativos do depurador sobre 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, confira Monitorar eventos.
Objetos de retorno de chamada 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 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, confira 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 os 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, confira 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 for registrado com um cliente, e IUnknown::Release quando o objeto for substituído ou o cliente for excluído.