12

我正在使用Dokan在POSIX 文件系统和 Windows之间编写一个层,并且需要将errno 类型(、等)的错误值转换为您在调用时收到的 Win32 等效项(例如)。EINVALENOENTGetLastError()ERROR_INVALID_PARAMETER

是否有可用于执行这些转换的现有函数、库或参考?

我通常会在 Python 源代码中寻找有关这些问题的灵感,但 Python 巧妙地避免了这种需要(至少据我所知)。

例如,EINVAL (22)将转换为ERROR_INVALID_PARAMETER (87).

4

2 回答 2

12

我过去做过一个关于这个主题的实验,主要是基于微软的DOSMAP.CPP单元。但是,我当时取消了该项目,因为错误映射并不总是适用于特定的错误代码。例如,并非每个 POSIX 版本都返回EINVALfor ERROR_INVALID_ACCESS,其中一些版本EACCES改为返回。我还对 POSIX.1-2008和DOSMAP.CPPmingw.cPostgresql error.ctclWinError.c、MySQL等的 errno.h 系统错误编号进行了比较;有时,对于特定的错误代码,它们之间的映射规则会有所不同。就个人而言,我建议您只处理它们之间一致的错误代码映射。my_winerr.c

于 2010-10-17T10:34:12.960 回答
7

对于每个errno通常都有许多可能的GetLastError值,因此您的想法可能不一定可行。

无论如何,我只是用谷歌搜索“errno to getlasterror”,第一个谷歌点击提供了来自 Cygwin 来源的此对应列表。

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

干杯&hth。

于 2010-10-17T07:20:01.060 回答