代码之家  ›  专栏  ›  技术社区  ›  Matt Joiner

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

  •  9
  • Matt Joiner  · 技术社区  · 14 年前

    I'm writing POSIX filesystem Dokan ,并需要转换 errno kind EINVAL , ENOENT ,等等),调用时将收到的Win32等效值 GetLastError() (例如 ERROR_INVALID_PARAMETER ).

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

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

    举个例子, EINVAL (22) 将转换为 ERROR_INVALID_PARAMETER (87) .

    2 回复  |  直到 14 年前
        1
  •  11
  •   Vantomex    14 年前

    我以前做过一个关于这个主题的实验,主要是基于微软 DOSMAP.CPP 单位。但是,当时我取消了这个项目,因为错误映射对于特定的错误代码并不总是正确的。例如,不是每个POSIX版本都返回 EINVAL 对于 ERROR_INVALID_ACCESS ,有些人回来了 EACCES 相反。我还比较了 errno.h system error numbers of POSIX.1-2008 DOSMAP.CPP文件 , mingw.c , Postgresql error.c tclWinError.c ,MySQL数据库 my_winerr.c 有时,对于特定的错误代码,它们之间的映射规则有所不同。我个人建议您只处理它们之间一致的错误代码映射。

        2
  •  6
  •   Community Reversed Engineer    7 年前

    为每个人 errno 总的来说有很多可能 GetLastError 价值观,所以你的想法未必可行。

    不管怎么说,我只是在谷歌上搜索了“errno to getlasterror”,然后第一个点击提供了 this correspondence list

    这是错误的方式, 错误信息 厄尔诺

    干杯。