使用回调对象

引擎使用三个类似回调 COM 的接口: IDebugEventCallbacks 用于通知 调试器扩展 和应用程序引擎或目标的更改, IDebugInputCallbacks 用于请求输入, IDebugOutputCallbacks 用于发送输出。

回调对象注册到客户端。 最多可以向每个客户端注册三个回调接口的一个实例, (接口的 Unicode 和 ASCII 版本计为同一接口) 。

创建客户端时,引擎会记住创建客户端的线程。 每当引擎调用注册到客户端的回调实例时,都使用此同一线程。 如果线程正在使用中,引擎会将需要执行的调用排入队列。 若要允许引擎进行这些调用,应在客户端线程空闲时调用 DispatchCallbacks 方法。 方法 ExitDispatch 将导致 DispatchCallbacks 返回。 如果线程是用于启动调试器会话的同一线程,则引擎可以在 WaitForEvent 方法期间进行回调调用,并且不需要调用 DispatchCallbacks

FlushCallbacks 方法告知引擎将所有缓冲的输出发送到输出回调。

事件回调对象

引擎使用 IDebugEventCallbacks 接口向调试器扩展和应用程序通知引擎和目标的事件和更改。 可以使用 SetEventCallbacks 向客户端注册 IDebugEventCallbacks实现。 可以使用 GetEventCallbacks 找到向客户端注册的当前实现。 可以使用 GetNumberEventCallbacks 找到跨所有客户端注册的事件回调数。

有关引擎如何管理事件的详细信息,请参阅 监视事件

输入回调对象

引擎使用 IDebugInputCallbacks 接口从调试器扩展和应用程序请求输入。 可以使用 SetInputCallbacks 向客户端注册 IDebugInputCallbacks 实现。 可以使用 GetInputCallbacks 找到向客户端注册的当前实现。 可以使用 GetNumberInputCallbacks 找到在所有客户端上注册的输入回调数。

有关引擎如何管理输入的详细信息,请参阅 输入和输出

输出回调对象

引擎使用 IDebugOutputCallbacks 接口将输出发送到调试器扩展和应用程序。 可以使用 SetOutputCallbacks 向客户端注册 IDebugOutputCallbacks 实现。 可以使用 GetOutputCallbacks 找到向客户端注册的当前实现。 可以使用 GetNumberOutputCallbacks 找到在所有客户端上注册的输出回调数。

有关引擎如何管理输出的详细信息,请参阅 输入和输出

注意 与 COM 对象的典型操作一样,引擎将在回调 COM 对象注册到客户端时调用 IUnknown::AddRef ,在替换对象或删除客户端时调用 IUnknown::Release