将 errno.h 错误值转换为 Win32 GetLastError() 等效项
Posted
技术标签:
【中文标题】将 errno.h 错误值转换为 Win32 GetLastError() 等效项【英文标题】:Convert errno.h error values to Win32 GetLastError() equivalents 【发布时间】:2011-04-26 12:35:52 【问题描述】:I'm writingPOSIX filesystem 之间的层,Windows 使用Dokan,需要将errno kind(EINVAL
、ENOENT
等)的错误值转换为 Win32 等效项'会在调用GetLastError()
(如ERROR_INVALID_PARAMETER
)时收到。
我是否可以使用现有的函数、库或参考来执行这些转换?
我通常会在 Python 源代码中寻找有关这些问题的灵感,但 Python 巧妙地避免了这种需要(至少据我所知)。
例如,EINVAL (22)
将转换为 ERROR_INVALID_PARAMETER (87)
。
【问题讨论】:
【参考方案1】:我过去做过一个关于这个主题的实验,主要基于微软DOSMAP.CPP单元。但是,我当时取消了该项目,因为错误映射并不总是适用于特定的错误代码。例如,不是每个 POSIX 版本都为ERROR_INVALID_ACCESS
返回EINVAL
,其中一些版本返回EACCES
。我还比较了errno.h system error numbers of POSIX.1-2008和DOSMAP.CPP、mingw.c、Postgresql error.c、tclWinError.c、mysql my_winerr.c
等等;有时,对于特定的错误代码,它们之间的映射规则会有所不同。就个人而言,我建议您只处理它们之间一致的错误代码映射。
【讨论】:
【参考方案2】:对于每个errno
,通常有许多可能的GetLastError
值,因此您的想法可能不一定可行。
无论如何,我只是用谷歌搜索了“errno to getlasterror”,第一个谷歌点击提供了来自 Cygwin 来源的this correspondence list。
这是错误的方式,GetLastError
到 errno
,但也许有帮助?
干杯&hth。
【讨论】:
以上是关于将 errno.h 错误值转换为 Win32 GetLastError() 等效项的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 QT 将 .ui 文件转换为 .py 文件,出现错误 ImportError: DLL load failed: %1 is not a valid Win32 application