使用回调对象

引擎使用三个类似 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