Класс System.Runtime.InteropServices.COMException

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

Класс COMException представляет собой исключение, которое возникает при возврате нераспознанного HRESULT из вызова метода COM.

Среда cl language runtime преобразует известные hrESULTs в исключения .NET, что позволяет COM-объектам возвращать значимые сведения об ошибках управляемым клиентам. Сопоставление исключений HRESULT и исключения также работает в другом направлении, возвращая определенные HRESULT для неуправляемых клиентов. Дополнительные сведения о сопоставлении см. в статье "Сопоставление HRESULTs и исключений".

Когда среда выполнения сталкивается с незнакомым HRESULT (HRESULT, который не имеет определенного соответствующего COMException исключения), он создает экземпляр класса. Это исключение для всех назначений предоставляет те же члены, что и любое исключение, и наследует общедоступное ErrorCode свойство, содержащее HRESULT, возвращаемое вызывающим пользователем. Если сообщение об ошибке доступно для среды выполнения (полученное из интерфейса IErrorInfo или Err объекта в Visual Basic или в некоторых случаях из операционной системы), сообщение возвращается вызывающей системе. Однако если сообщение об ошибке не включено разработчиком в компонент COM, среда выполнения возвращает восьмиразрядное значение HRESULT вместо строки ошибки. Наличие HRESULT позволяет вызывающему объекту определить причину универсального исключения.

Обработка исключения COMException

Ниже приведены некоторые рекомендации по устранению COMException неполадок с исключением.

ErrorCode Проверьте свойство, когда среда выполнения сталкивается с незнакомым HRESULT и вызывает COMException исключение, ErrorCode свойство включает сообщение об ошибке или, если сообщение об ошибке недоступно, значение HRESULT восьмизначного числа. Сообщение об ошибке или значение HRESULT поможет определить причину исключения.

Список значений HRESULT см. в разделе "Общие значения HRESULT".

При передаче аргументов с поздней привязкой к методам объектов COMException Microsoft Office исключение может возникать, когда объекты являются COM-объектами. Поздняя привязка предполагает, что такие вызовы методов включают параметр ByRef и что передаваемое свойство имеет метод доступа set . Если свойство не так, .NET создает MissingMethodException исключение (с HRESULT CORE_E_MISSINGMETHOD ). Для временного решения этой проблемы, используйте объекты с ранней привязкой или передавайте переменную вместо свойства объекта.

COM используется для обмена данными между Visual Studio и процессом размещения. Так как он используется перед выполнением кода, вызов CoInitializeSecurity приводит к возникновению этого исключения. В некоторых случаях запуск Visual Studio как Администратор istrator может устранить проблему. Вы также можете отключить процесс размещения.

Создание исключения COMException

Несмотря на то что класс можно использовать COMException для возврата определенных HRESULT для неуправляемых клиентов, исключение .NET лучше, чем использование универсального исключения. Учитывайте, что управляемые клиенты, а также неуправляемые клиенты могут использовать объект .NET, а вызов HRESULT управляемому вызывающуму объекту менее понятен, чем исключение.