listings of Win32 error codes 中,每个错误都有三个组成部分:

  • 数字错误代码
  • 描述性消息
  • 由下划线分隔的大写单词组成的标识符

  • 根据 the documentation ,术语“消息标识符”指的是描述性消息,但它没有说明大写错误名称的术语是什么,我在任何地方都找不到。这些标识符似乎类似于 PowerShell ErrorRecord 对象中所谓的“错误 ID”,但在谷歌上搜索“win32 错误 id”和“win32 错误标识符”并没有找到答案。

    例如,在以下错误中:


  • 4 错误代码
  • The system cannot open the file. 消息标识符
  • ERROR_TOO_MANY_OPEN_FILES 是 __________?

  • 另外,在给定错误代码的情况下,如何确定此文本值?我可以轻松确定与给定错误代码相关联的消息标识符,如下所示:
    string MessageIdentifier = new Win32Exception(ErrorCode).Message;
    

    但是,the Win32Exception class 似乎没有与这些大写错误名称对应的属性(类似于 ErrorRecord 类的 ErrorId 属性)。

    在一些 list 中,我看到这些类型的标识符被称为“常量”,但如果它们是常量,它们在哪里定义/枚举以及如何从程序访问它们?

    最佳答案



    最后两点你错了。 4 既是错误代码又是消息标识符,与您链接到的同一个 documentation 相同:


    The system cannot open the file. 是属于消息标识符 4 的消息文本。该文本由 FormatMessage() Win32Exception.Message 报告。
    ERROR_TOO_MANY_OPEN_FILES 只是 Win32 SDK 中 winerror.h 中人类可读的 #define:

    //
    // MessageId: ERROR_TOO_MANY_OPEN_FILES
    //
    // MessageText:
    //
    // The system cannot open the file.
    //
    #define ERROR_TOO_MANY_OPEN_FILES        4L
    

    Win32 API 或 .NET 中都没有函数可以在给定错误代码 ERROR_TOO_MANY_OPEN_FILES 的情况下返回文本 4 。如果需要该功能,则必须编写自己的查找代码,如以下 pinvoke.net 示例所示:

    WINERROR (Constants)
    int errorCode = 4; //Microsoft.Win32.Interop.ResultWin32.ERROR_TOO_MANY_OPEN_FILES
    string identName = Microsoft.Win32.Interop.ResultWin32.GetErrorName(errorCode);
    // returns "ERROR_TOO_MANY_OPEN_FILES"
    

    关于c# - 什么是 Win32 错误代码的大写文本标识符,以及如何在给定错误代码的情况下以编程方式确定它们?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30203717/

    10-12 12:43
    查看更多