Uso de objetos de devolución de llamada

Hay tres interfaces COM de devolución de llamada que usa el motor: IDebugEventCallbacks para notificar a las extensiones del depurador y las aplicaciones de cambios en el motor o destino, IDebugInputCallbacks para solicitar entrada e IDebugOutputCallbacks para enviar la salida.

Los objetos de devolución de llamada se registran con clientes. Como máximo, se puede registrar una instancia de cada una de las tres interfaces de devolución de llamada con cada cliente (las versiones Unicode y ASCII de un recuento de interfaz que la misma interfaz).

Cuando se crea un cliente, el motor recuerda el subproceso en el que se creó. El motor usa este mismo subproceso cada vez que realiza una llamada a una instancia de devolución de llamada registrada con el cliente. Si el subproceso está en uso, el motor pondrá en cola las llamadas que necesita realizar. Para permitir que el motor realice estas llamadas, se debe llamar al método DispatchCallbacks cada vez que el subproceso de un cliente está inactivo. El método ExitDispatch hará que DispatchCallbacks devuelva. Si el subproceso es el mismo subproceso que se usó para iniciar la sesión del depurador, el motor puede realizar llamadas de devolución de llamada durante el método WaitForEvent y No es necesario llamar a DispatchCallbacks .

El método FlushCallbacks indica al motor que envíe toda la salida almacenada en búfer a las devoluciones de llamada de salida.

Objetos de devolución de llamada de eventos

El motor usa la interfaz IDebugEventCallbacks para notificar a las aplicaciones y extensiones del depurador de eventos y cambios en el motor y el destino. Una implementación de IDebugEventCallbacks se puede registrar con un cliente mediante SetEventCallbacks. La implementación actual registrada con un cliente se puede encontrar mediante GetEventCallbacks. El número de devoluciones de llamada de eventos registradas en todos los clientes se puede encontrar mediante GetNumberEventCallbacks.

Para más información sobre cómo administra el motor los eventos, consulte Supervisión de eventos.

Objetos de devolución de llamada de entrada

El motor usa la interfaz IDebugInputCallbacks para solicitar la entrada de las aplicaciones y las extensiones del depurador. Una implementación de IDebugInputCallbacks se puede registrar con un cliente mediante SetInputCallbacks. La implementación actual registrada con un cliente se puede encontrar mediante GetInputCallbacks. El número de devoluciones de llamada de entrada registradas en todos los clientes se puede encontrar mediante GetNumberInputCallbacks.

Para más información sobre cómo administra el motor la entrada, consulte Entrada y salida.

Objetos de devolución de llamada de salida

El motor usa la interfaz IDebugOutputCallbacks para enviar la salida a las aplicaciones y extensiones del depurador. Una implementación de IDebugOutputCallbacks se puede registrar con un cliente mediante SetOutputCallbacks. La implementación actual registrada con un cliente se puede encontrar mediante GetOutputCallbacks. El número de devoluciones de llamada de salida registradas en todos los clientes se puede encontrar mediante GetNumberOutputCallbacks.

Para más información sobre cómo administra el motor la salida, consulte Entrada y salida.

Nota Como es habitual para los objetos COM, el motor llamará a IUnknown::AddRef en un objeto COM de devolución de llamada cuando se registre con un cliente e IUnknown::Release cuando se reemplace el objeto o se elimine el cliente.