将 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(EINVALENOENT 等)的错误值转换为 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。

这是错误的方式,GetLastErrorerrno,但也许有帮助?

干杯&hth。

【讨论】:

以上是关于将 errno.h 错误值转换为 Win32 GetLastError() 等效项的主要内容,如果未能解决你的问题,请参考以下文章

C 标准库系列之errno.h

linxu中系统错误码errno

linxu中系统错误码errno

尝试使用 QT 将 .ui 文件转换为 .py 文件,出现错误 ImportError: DLL load failed: %1 is not a valid Win32 application

linux 中的errno 和 strerror(errno)

将 GLubyte* 转换为 GLuint* 用于 alpha 纹理 Opengl 3.0 / c++ / Win32