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

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

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

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

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

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

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

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

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

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

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

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

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

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

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