将errno.h错误值转换为Win32 GetLastError()等效项

时间:2010-10-17 07:02:47

标签: c++ winapi posix errno dokan

I'm writing POSIX filesystem和使用Dokan的Windows之间的图层,需要转换errno kindEINVAL,{{1}的错误值调用GetLastError()时收到的Win32等效项(例如ERROR_INVALID_PARAMETER)。

我可以使用现有的功能,库或参考来执行这些转换吗?

我通常会在Python上寻找灵感来解决这些问题,但Python巧妙地避免了这种需求(至少就我所知)。

例如,ENOENT会转换为EINVAL (22)

2 个答案:

答案 0 :(得分:10)

我过去曾做过关于这个主题的实验,主要基于Microsoft DOSMAP.CPP单元。但是,我当时取消了该项目,因为错误映射并不总是适用于特定的错误代码。例如,并非每个POSIX版本都为EINVAL返回ERROR_INVALID_ACCESS,其中一些版本会返回EACCES。我还对errno.h system error numbers of POSIX.1-2008DOSMAP.CPPmingw.cPostgresql error.ctclWinError.c,MySQL my_winerr.c以及更多内容进行了比较;有时,映射规则因特定错误代码而异。就个人而言,我建议你只处理它们之间的一致错误代码映射。

答案 1 :(得分:5)

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

无论如何,我只是用谷歌搜索“errno to getlasterror”,第一次谷歌搜索提供了来自Cygwin来源的this correspondence list

这是错误的方式,GetLastErrorerrno,但也许有用吗?

干杯&第h