Сообщения об ошибках Windows

0

Я разрабатываю программу, использующую HIDAPI для связи через USB, и кажется, что функция API hid_error() возвращает последнее сообщение об ошибке прямо из окон, а не сообщение, сгенерированное самим API. Где я могу найти список всех возможных сообщений об ошибках, чтобы я мог более точно реагировать на ошибку?

  • 0
    Общие из них объявлены в заголовках WinError.h и NtStatus.h SDK. Водитель может добавить свой собственный.
  • 0
    @HansPassant: кроме того, первым результатом Google является соответствующая документация MSDN.
Показать ещё 2 комментария
Теги:
hid
usb
hidapi

2 ответа

2
Лучший ответ

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

Первая функция позволит вам проверить код ошибки на кодах системных ошибок и в зависимости от вашего желания (хотя вы не поделились тем, почему вам нужна какая-либо настройка), вы можете либо отобразить собственное сообщение об ошибке, либо просто использовать вторая функция для сохранения этого, когда это возможно. Разумеется, вы также можете сохранить вывод hid_error, поскольку это эквивалентно.

1) Получение самого кода ошибки.

Функция GetLastError

Получает значение кода последней ошибки вызывающего потока. Код последней ошибки поддерживается для каждого потока. Несколько потоков не перезаписывают код последней ошибки.

2) Извлечение строки из кода ошибки.

Функция FormatMessage

Форматирует строку сообщения. Функция требует определения сообщения как ввода. Определение сообщения может поступать из буфера, переданного в функцию. Он может исходить из ресурса таблицы сообщений в уже загруженном модуле. Или вызывающий абонент может запросить функцию поиска ресурсов (таблиц) таблицы сообщений для определения сообщения. Функция находит определение сообщения в ресурсе таблицы сообщений на основе идентификатора сообщения и идентификатора языка. Функция копирует форматированный текст сообщения в выходной буфер, обрабатывая любые внедренные последовательности вставки, если требуется.

Например, в приложении Qt это было бы более естественным способом решения проблемы для вашей настройки:

QString QtWin :: errorStringFromHresult (HRESULT hresult)

Возвращает кодовое имя указанного идентификатора ошибки hresult (обычно это имя макроса WinAPI) или пустую строку, если сообщение неизвестно.

  • 0
    Я не спрашиваю, как получить последнюю ошибку. Я спрашиваю, как получить список всех возможных ошибок, чтобы моя программа реагировала на все возможные сообщения, в зависимости от их содержания.
  • 0
    @mFeinstein: ты действительно прочитал ответ? Ответом является упоминание о том, как вы можете настроить обработку ошибок при необходимости и как получить запасной вариант, когда это не нужно. Он предоставляет соответствующую встроенную документацию по API, а также ссылки на детали. Я запутался, в чем твоя проблема.
Показать ещё 16 комментариев
1

Возможно, вы посмотрите на системные коды ошибок.

  • 0
    Спасибо, я только что нашел ошибку в этой ссылке, так что я думаю, что другие тоже будут там
  • 0
    Кстати ... ERROR_STACK_OVERFLOW 1001 (0x3E9) Слишком глубокая рекурсия; стек переполнен. -> посмотрите, кто там :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню