Использование объектов обратного вызова
Существует три интерфейса 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 при замене объекта или удалении клиента.