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