Какой источник информации о кодах ошибок COM является лучшим?[закрыто]

StackOverflow https://stackoverflow.com/questions/52059

  •  09-06-2019
  •  | 
  •  

Вопрос

Я не знаю, где получить лучшую информацию о значении, вероятных причинах и возможных решениях для устранения ошибок COM, когда все, что у вас есть, это HRESULT.

Поиск Google для таких терминов, как «80004027», почти бесполезно, поскольку он отправляет вас в случайные дискуссионные группы, где 90% случаев, вопрос «Что означает 80004027?» не отвечает.

Какой хороший ресурс для этого?Почему MSDN не является лучшим результатом Google?

Это было полезно?

Решение

Я всегда использую WinError.h.Это подавляющее большинство кодов ошибок Windows всех видов.

Ключевым индикатором, на который следует обратить внимание, является часть кода Facility:второй по значимости байт.То есть 0x80nnmmmm, где nn — это объект.Это говорит вам, какой компонент сгенерировал код.Все, что имеет значение 7, представляет собой код ошибки Windows, переупакованный как HRESULT, и вам следует преобразовать младшее слово в десятичное и найти его в WinError.h.Существуют также диапазоны ошибок, которые отображаются в отдельных заголовках (например,все значения от 12000 до 12999 — это код ошибки WinInet, и вам следует поискать его в WinInet.h).

Поиск кода ошибки даст вам символическое имя, которое можно найти в большей документации, чем сам код или формулировка сообщения об ошибке.

FACILITY_ITF (значение которого равно 4, поэтому HRESULT начинаются с 0x8004) указывает, что ошибка определяется используемым вами интерфейсом;вам придется проверить этот интерфейс, чтобы узнать, что это означает.

Наконец, COM также предлагает интерфейс IErrorInfo для получения расширенной информации об ошибках:вызовите GetErrorInfo, чтобы получить объект ошибки.Вам придется запросить ISupportErrorInfo и вызвать метод InterfaceSupportsErrorInfo этого интерфейса, чтобы определить, действительно ли вызываемый вами интерфейс установил объект ошибки (и, конечно, если это был код шаблона, он мог быть ложным).

Другие советы

Поиск ошибок (ErrLook.exe) в папке %PROGRAMFILES%[Некоторые версии Visual Studio] ools Common7\ часто, но не всегда, выдает сообщение об ошибке:

    |---------------------------------------------------|
    | [] Error Lookup                                   |
    |---------------------------------------------------|
    |   Value: [0x80004027]                             |
    |                                                   |
    |   Error Message                                   |
    |   +---------------------------------------------+ |
    |   |The component or application containing the  | |
    |   |component has been disabled                  | |
    |   |                                             | |
    |   +---------------------------------------------+ |
    |   [Modules...]    [Look up]    [Close]    [Help]  |
    |----------------------------------------------------

Если это не сработает, вы можете воспользоваться некоторыми идеями отсюда:http://blogs.msdn.com/oldnewthing/archive/2008/09/01/8914664.aspx

(Ошибка поиска просто вызывает formatmessage () с флага Format_message_from_system)

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

Если вы обнаружили ошибку в коде, вы можете надеяться, что компонент реализует расширенные функции ошибок (GetErrorInfo(), такие же, как объект Err в VB), и вы сможете получить полное сообщение с описанием проблемы.

Хорошая ссылка от Пракаша (я не знал о RCNr - я думал, что эти байты были частью объекта - но, похоже, это верно только в 16-битной Windows.)

Часто эти неизвестные коды относятся к используемому вами интерфейсу/компоненту.Для объекта будет установлено значение FACILITY_ITF.У меня есть старая программа HRPlus(связь?), который анализирует HRESULT.

Структура кода ошибки COM

Второе место в результатах Google по коду ошибки COM.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top