Преобразование значений ошибок errno.h в эквиваленты Win32 GetLastError () - PullRequest
9 голосов
/ 17 октября 2010

Я пишу слой между файловой системой POSIX и Windows, использующей Dokan , и необходимо преобразовать значения ошибок типа errno (EINVAL, ENOENT и т. Д.), К эквивалентам Win32, которые вы получите при вызове GetLastError() (например, ERROR_INVALID_PARAMETER).

Существует ли какая-либо существующая функция, библиотека или ссылка, которую я могу использовать для выполнения этих преобразований?

Обычно я просматриваю источник Python для вдохновения по этим вопросам, но Pythonаккуратно избегает этой необходимости (по крайней мере, насколько я могу судить).

Например, EINVAL (22) преобразуется в ERROR_INVALID_PARAMETER (87).

Ответы [ 2 ]

10 голосов
/ 17 октября 2010

В прошлом я проводил эксперимент на эту тему, в основном на основе блока Microsoft DOSMAP.CPP .Однако я отменил проект в то время, потому что отображение ошибок не всегда было правильным для определенных кодов ошибок.Например, не каждая версия POSIX возвращает EINVAL для ERROR_INVALID_ACCESS, некоторые из них возвращают EACCES.Я также провел сравнение между errno.h номерами системных ошибок POSIX.1-2008 и DOSMAP.CPP , mingw.c , Postgresqlerror.c , tclWinError.c , MySQL my_winerr.c и многие другие;иногда правила отображения различаются среди них для конкретных кодов ошибок.Лично я предлагаю вам иметь дело только с согласованным отображением кода ошибки среди них.

5 голосов
/ 17 октября 2010

Для каждого errno в общем есть много возможных GetLastError значений, так что то, что вы думаете, не обязательно может быть осуществимым.

В любом случае, я просто нагуглил "errno to getlasterror", иПервый гугл-хит предоставил этот список корреспонденции из источников Cygwin.

Это неправильный путь, GetLastError до errno, но, возможно, полезно?

Приветствия &НТН.

...