将 errno.h 错误值转换为 Win32 GetLastError() 等效项
我正在POSIX 文件系统,以及使用 Dokan,并且需要转换 errno 类型 的错误值( EINVAL
、ENOENT
等),转换为调用 GetLastError()
(例如 ERROR_INVALID_PARAMETER
)。
我可以使用现有的函数、库或引用来执行这些转换吗?
我通常会浏览 Python 源代码以获取有关这些问题的灵感,但 Python 巧妙地避免了这种需求(至少就目前而言)我可以告诉)。
例如,EINVAL (22)
将转换为 ERROR_INVALID_PARAMETER (87)
。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我过去曾做过关于这个主题的实验,主要基于 Microsoft DOSMAP .CPP 单位。然而,我当时取消了该项目,因为错误映射并不总是适合特定的错误代码。例如,并非每个 POSIX 版本都会针对
ERROR_INVALID_ACCESS
返回EINVAL
,其中一些版本会返回EACCES
。我还对 POSIX.1 的 errno.h 系统错误号进行了比较-2008 和 DOSMAP.CPP,mingw.c, Postgresql 错误.c,tclWinError.c、MySQLmy_winerr.c
等等;有时,对于特定的错误代码,它们之间的映射规则有所不同。就我个人而言,我建议您仅处理它们之间一致的错误代码映射。I had done an experiment about this subject in the past, mostly based on Microsoft DOSMAP.CPP unit. However, I cancelled the project at that time because the error mapping was not always right for particular error codes. For Example, not every POSIX version return
EINVAL
forERROR_INVALID_ACCESS
, some of them returnEACCES
instead. I also had made a comparison between errno.h system error numbers of POSIX.1-2008 and DOSMAP.CPP, mingw.c, Postgresql error.c, tclWinError.c, MySQLmy_winerr.c
and many more; sometimes, the mapping rule differ among them for particular error codes. Personally, I suggest you to deal with only the consistent error-code mapping among them.对于每个
errno
通常有许多可能的GetLastError
值,因此您的想法可能不一定可行。不管怎样,我只是用谷歌搜索“errno to getlasterror”,第一个谷歌点击提供了 此对应列表来自 Cygwin 来源。
这是错误的方式,
GetLastError
到errno
,但也许有帮助?干杯&嗯。
For each
errno
there are in general many possibleGetLastError
values, so what you're thinking may not necessarily be feasible.Anyway, I just googled "errno to getlasterror", and the first google hit provided this correspondence list from the Cygwin sources.
It is the wrong way,
GetLastError
toerrno
, but perhaps helpful?Cheers & hth.