2013-12-26 4 views
0

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

+0

Общие из них объявлены в заголовках WinError.h и NtStatus.h SDK. Драйвер может добавить свой собственный. –

+0

@HansPassant: кроме того, первым результатом Google является соответствующая документация MSDN. – lpapp

+0

Кроме того, StackOverflow - это место, где вопросы индексируются, а google дает лучшие результаты, потому что вопросы здесь, а люди с тем же вопросом получают ответ быстрее ... google: «сообщения об ошибках Windows HID» и см. Второй результат. ..anyone для HID, который хочет, чтобы сообщения об ошибках имели хороший и прямой ответ. – mFeinstein

ответ

2

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

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

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

GetLastError function

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

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

FormatMessage function

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

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

QString QtWin::errorStringFromHresult(HRESULT hresult)

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

+0

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

+0

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

+0

Я прочитал его, но теперь вы его отредактировали, поэтому он включает в себя целый новый абзац с «http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29 .aspx ", который WASNT там раньше. ТАКЖЕ, если вы прочитаете HIDAPI hid_error() (который я разместил), вы увидите, что эта функция уже вызывает функции 1 и 2, которые вы опубликовали. И что вы подразумеваете под моим желанием, не было опубликовано ?! Я сказал, что хочу получить ошибки для анализа перед кодированием, чтобы я мог интерпретировать все ошибки, возвращаемые hid_error() – mFeinstein

1

Возможно, вы можете взглянуть на System Error Codes.

+0

Спасибо, я только что нашел ошибку, которую я получаю внутри этой ссылки, поэтому я думаю, что остальные тоже будут там – mFeinstein

+0

Btw ... ERROR_STACK_OVERFLOW 1001 (0x3E9) Рекурсия слишком глубокая; стек переполнен. -> Посмотрите, кто там есть :) – mFeinstein

Смежные вопросы