Использование объектов обратного вызова

Существует три интерфейса обратного вызова COM, которые используются подсистемой: IDebugEventCallbacks для уведомления расширений отладчика и приложений об изменениях в подсистеме или целевом объекте, IDebugInputCallbacks для запроса входных данных и IDebugOutputCallbacks для отправки выходных данных.

Объекты обратного вызова регистрируются в клиентах. В каждом клиенте можно зарегистрировать не более одного экземпляра каждого из трех интерфейсов обратного вызова (версии Юникода и ASCII интерфейса считаются одним и тем же интерфейсом).

При создании клиента подсистема запоминает поток, в котором он был создан. Подсистема использует этот же поток при каждом вызове экземпляра обратного вызова, зарегистрированного в клиенте. Если поток используется, подсистема будет ставить вызовы в очередь. Чтобы разрешить подсистеме выполнять эти вызовы, следует вызывать метод DispatchCallbacks всякий раз, когда поток клиента простаивает. Метод ExitDispatch вызовет возврат DispatchCallbacks . Если поток является тем же потоком, который использовался для запуска сеанса отладчика, подсистема может выполнять обратные вызовы во время метода WaitForEvent , и DispatchCallbacks не требуется вызывать.

Метод FlushCallbacks указывает подсистеме отправлять все буферизированные выходные данные в обратные вызовы вывода.

Объекты обратного вызова событий

Интерфейс IDebugEventCallbacks используется подсистемой для уведомления расширений и приложений отладчика о событиях и изменениях в подсистеме и целевом объекте. Реализацию IDebugEventCallbacks можно зарегистрировать в клиенте с помощью SetEventCallbacks. Текущую реализацию, зарегистрированную в клиенте, можно найти с помощью GetEventCallbacks. Количество обратных вызовов событий, зарегистрированных на всех клиентах, можно узнать с помощью GetNumberEventCallbacks.

Дополнительные сведения о том, как подсистема управляет событиями, см. в разделе Мониторинг событий.

Входные объекты обратного вызова

Интерфейс IDebugInputCallbacks используется подсистемой для запроса входных данных из расширений и приложений отладчика. Реализацию IDebugInputCallbacks можно зарегистрировать в клиенте с помощью SetInputCallbacks. Текущую реализацию, зарегистрированную в клиенте, можно найти с помощью GetInputCallbacks. Количество входных обратных вызовов, зарегистрированных на всех клиентах, можно найти с помощью GetNumberInputCallbacks.

Дополнительные сведения о том, как подсистема управляет вводом, см. в разделе Входные и выходные данные.

Выходные объекты обратного вызова

Интерфейс IDebugOutputCallbacks используется подсистемой для отправки выходных данных в расширения и приложения отладчика. Реализацию IDebugOutputCallbacks можно зарегистрировать в клиенте с помощью SetOutputCallbacks. Текущую реализацию, зарегистрированную в клиенте, можно найти с помощью GetOutputCallbacks. Количество обратных вызовов вывода, зарегистрированных на всех клиентах, можно найти с помощью getNumberOutputCallbacks.

Дополнительные сведения о том, как подсистема управляет выходными данными, см. в разделе Входные и выходные данные.

Примечание Как и в случае с COM-объектами, подсистема вызывает IUnknown::AddRef для com-объекта обратного вызова при его регистрации в клиенте, а IUnknown::Release — при замене объекта или удалении клиента.