Стратегии обработки ошибок

Так как методы интерфейса являются виртуальными, вызывающий объект не может знать полный набор значений, которые могут быть возвращены из любого вызова. Одна реализация метода может возвращать пять значений; другой может вернуть восемь.

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

Значения HRESULT

Возвращаемое значение com-функций и методов — HRESULT. Значения некоторых HRESULT были изменены в COM, чтобы исключить все дублирование и перекрытие с системными кодами ошибок. Те, которые дублируют коды системных ошибок, были изменены на FACILITY_WIN32, и те, которые перекрываются, остаются в FACILITY_NULL. Общие значения HRESULT и их значения перечислены в следующей таблице.

HRESULT значение Описание
E_ABORT
0x80004004
Операция была прервана из-за неопределенной ошибки.
E_ACCESSDENIED
0x80070005
Общая ошибка, отказано в доступе.
E_FAIL
0x80004005
Произошла неуказанная ошибка.
E_HANDLE
0x80070006
Использовался недопустимый дескриптор.
E_INVALIDARG
0x80070057
Один или несколько аргументов недопустимы.
E_NOINTERFACE
0x80004002
Метод QueryInterface не распознал запрошенный интерфейс. Интерфейс не поддерживается.
E_NOTIMPL
0x80004001
Метод не реализован.
E_OUTOFMEMORY
0x8007000E
Метод не удалось выделить необходимую память.
E_PENDING
0x8000000A
Данные, необходимые для завершения операции, пока недоступны.
E_POINTER
0x80004003
Использовался недопустимый указатель.
E_UNEXPECTED
0x8000FFFF
Произошел катастрофический сбой.
S_FALSE
0x00000001
Метод успешно выполнен и вернул логическое значение FALSE.
S_OK
0x00000000
Метод выполнен успешно. Если ожидается логическое возвращаемое значение, возвращаемое значение равно TRUE.

Ошибки сети

Если первые четыре цифры кода ошибки имеют значение 8007, это означает системную или сетевую ошибку. С помощью команды net можно декодировать эти типы ошибок. Чтобы декодировать ошибку, сначала преобразуйте последние четыре цифры шестнадцатеричного кода ошибки в десятичный. Затем в командной строке введите следующий код, где десятичный код заменяется возвращаемым значением, которое нужно декодировать:

net helpmsg <decimal_code>

Команда net возвращает описание ошибки. Например, если COM возвращает ошибку 8007054B, преобразуйте 054B в десятичную (1355). Затем введите следующую команду.

net helpmsg 1355

Net command возвращает описание ошибки: "Указанный домен не существует".

Обработка ошибок в COM