Обработка исключений при взаимодействии с COM

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

Среда выполнения автоматически сопоставляет HRESULT из COM-взаимодействия с более конкретными исключениями. Например, E_ACCESSDENIED становится UnauthorizedAccessException, E_OUTOFMEMORY становится OutOfMemoryExceptionи т. д.

Если HRESULT является пользовательским результатом или если оно неизвестно для среды выполнения, среда выполнения передает универсальный COMException объект клиенту. Свойство ErrorCodecomException содержит значение HRESULT.

Работа с IErrorInfo

При передаче ошибки из COM в управляемый код среда выполнения заполняет объект исключения сведениями об ошибке. COM-объекты, поддерживающие IErrorInfo и возвращающие HRESULTS, предоставляют эти сведения для исключений управляемого кода. Например, среда выполнения сопоставляет описание ошибки COM со свойством исключения Message . Если HRESULT не предоставляет дополнительных сведений об ошибке, среда выполнения заполняет многие свойства исключения значениями по умолчанию.

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

См. также