Поделиться через


Обработка ошибок и возвращение значений

VSPackages и модели COM используют одну и ту же архитектуру на наличие ошибок. SetErrorInfo и GetErrorInfo функции являются частью программного интерфейса (API Win32). Любое VSPackage в интегрированной среде разработки (ide) может вызывать эти API глобального Win32 для записи сведений об ошибке в формате rtf получение уведомлений ошибки. SDK для Visual Studio предоставляет сборки взаимодействия для управления сведениями об ошибке.

Методы Взаимодействия

Для удобства интегрированная среда разработки предоставляет метод SetErrorInfoследует использовать вместо вызова API Win32. При использовании управляемого кода SetErrorInfo. При ошибке HRESULT прибывает сообщение об ошибке на уровень, на котором должно отображаться (это часто реализация объекта IOleCommandTarget обработчик команд), интегрированная среда разработки используется другой метод ReportErrorInfo, чтобы указать соответствующее окно сообщения. В управляемом коде воспользуйтесь ReportErrorInfo метод.

Например, разработчик VSPackage, COM-объект средство обычно ISupportErrorInfo. ISupportErrorInfo интерфейс обеспечивает форматированный сведения об ошибке может перемещаться вертикально вверх по цепочке вызовов. Объекты, которые могут быть использованы с помощью процессы или в потоки должны поддерживать ISupportErrorInfo убедиться в том, что правильно в формате rtf сведения об ошибке маршалированно обратно вызывающему.

Все объекты, связанные с VSPackages, участвующей в расширения интегрированной среды разработки, включая фабрики редактора, редакторы, иерархии и предлагаются службы, должны поддерживать форматированный сведения об ошибке. Пока среда разработки не требуется для реализации этих объектов VSPackage ISupportErrorInfoона всегда ободрена.

Интегрированная среда разработки отвечает за получение сведений об ошибках и отображения его для пользователя Visual Studio после HRESULT распространяет в интегрированной среде разработки. Интегрированная среда разработки также механизм для создания ErrorInfo объекты.

Общие рекомендации

Можно использовать SetErrorInfo и ReportErrorInfo методы для задания и отчет ошибки, внутренние к реализации VSPackage. Однако как правило, следуйте приведенным ниже рекомендациям для обработки сообщений об ошибке в VSPackage.

  • Реализуйте ISupportErrorInfo COM-объект в VSPackage.

  • Создайте механизм отчетов об ошибках, который вызывает SetErrorInfo метод в объектах, которые реализуют IOleCommandTarget.

  • Let - ошибкам отображения интегрированной среды разработки пользователям посредством ReportErrorInfo метод.

Сведения об ошибке в интегрированной среде разработки

Следующие правила определяют способ обработки сведений об ошибке Visual Studio интегрированная среда разработки:

  • Как оборонительная стратегия, чтобы гарантировать несвежое сведения об ошибке не отмечено для пользователей, функции, вызывающие SetErrorInfo если первый вызов метода ReportErrorInfo метод. Передайте in null очистить спрятал сообщения об ошибке в кэше, прежде чем вызывать любые конструкции, которые могут задать новое сведения об ошибке.

  • Функции, которые непосредственно не " сообщения об ошибке можно использовать только для вызова SetErrorInfo метод если они возвращают ошибку HRESULT. Допустимо очистки ErrorInfo для записи к функции и возврата S_OK. Единственное исключение из этого правила, когда вызов возвращает ошибку HRESULT от того, что принимающая сторона может явно восстановить или смело игнорировать.

  • Любая другая сторона, явно пропускает ошибку SetErrorInfo вызов S_OKметод с HRESULT . В противном случае - ErrorInfo объект может быть использован, когда другая сторона случайным образом формирует ошибку без обеспечения безопасности своего ErrorInfo.

  • Все методы, которые возникают ошибки SetErrorInfo ободрите вызова HRESULT метод, чтобы предоставить форматированный сведения об ошибке. Если возвращенное HRESULT специальный FACILITY_ITF выполнение предоставляет ошибка, затем правильным метод ErrorInfoобъект. Возвращенная ошибка, если ошибка системы стандарта (например, SetErrorInfo " E_OUTOFMEMORY" E_ABORT" E_INVALIDARGи т д) приемлемо возвращен код ошибки без явного вызова E_UNEXPECTEDметод. Как защитительная стратегия создания кода, вызвавшего ошибку SetErrorInfo (включая ошибки системы), всегда вызывайте ErrorInfo метод, с nullописание сбоя подробно или HRESULT .

  • Все функции, возвращающие ошибку, который инициировал другой вызов должны передачи сведений, которое было получено из терпя сбой вызова в HRESULT без изменения ErrorInfo объект.

См. также

Ссылки

IOleCommandTarget

Другие ресурсы

SetErrorInfo (Component Automation)

GetErrorInfo

ISupportErrorInfo Interface