Преобразовать значения ошибок errno.h в эквиваленты Win32 GetLastError()
Я пишу слой между файловой системой POSIX и Windows, используя Dokan, и мне нужно преобразовать значения ошибок вида errno (EINVAL
, ENOENT
и т. д.), к эквивалентам Win32, которые вы получите при вызове GetLastError()
(такие как ERROR_INVALID_PARAMETER
).
Существует ли какая-либо функция, библиотека или ссылка, которые я могу использовать для выполнения этих преобразований?
Я обычно просматриваю исходный код Python для вдохновения по этим вопросам, но Python аккуратно избегает этой необходимости (по крайней мере, насколько я могу судить).
В качестве примера, EINVAL (22)
будет преобразован в ERROR_INVALID_PARAMETER (87)
,
2 ответа
В прошлом я проводил эксперимент по этому вопросу, в основном на основе модуля Microsoft DOSMAP.CPP. Однако я отменил проект в то время, потому что отображение ошибок не всегда было правильным для определенных кодов ошибок. Например, не каждая версия POSIX возвращает EINVAL
за ERROR_INVALID_ACCESS
некоторые из них возвращаются EACCES
вместо. Я также провел сравнение между номерами системных ошибок errno.h в POSIX.1-2008 и DOSMAP.CPP, mingw.c, Postgresql error.c, tclWinError.c, MySQL. my_winerr.c
и многое другое; иногда правила отображения различаются среди них для конкретных кодов ошибок. Лично я предлагаю вам иметь дело только с согласованным отображением кода ошибки среди них.
Для каждого errno
Есть в общем много возможных GetLastError
ценности, так что то, что вы думаете, не обязательно может быть осуществимым.
Во всяком случае, я просто погуглил "errno to getlasterror", и первый хит от Google предоставил этот список корреспонденции из источников Cygwin.
Это неправильный путь, GetLastError
в errno
, но, возможно, полезно?
Ура & hth.