Стратегии обработки ошибок
Так как методы интерфейса являются виртуальными, вызывающий объект не может знать полный набор значений, которые могут быть возвращены из любого вызова. Одна реализация метода может возвращать пять значений; другой может вернуть восемь.
В документации перечислены общие значения, которые могут быть возвращены для каждого метода; это значения, которые необходимо проверка и обрабатывать в коде, так как они имеют особые значения. Другие значения могут быть возвращены, но поскольку они не имеют смысла, вам не нужно писать специальный код для их обработки. Простая проверка для нуля или ненулевого является достаточной.
Значения 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 возвращает описание ошибки: "Указанный домен не существует".