充分利用它的十六进制数的Windows系统错误代码标题/描述(Getting the Windows

2019-09-02 17:51发布

我使用的P / Invoke瞎搞一些窗口功能。 偶尔,我得到一个错误代码不是ERROR_SUCCESS(这样一个奇怪的名字)。

有没有办法在程序内看这些吗? Forexample,如果我得到错误1017.我可以告诉用户

该系统试图加载或还原文件到注册表,但指定的文件不是一个注册表文件格式。 (ERROR_NOT_REGISTRY_FILE:0x3F9)

代替

错误代码:1017

Answer 1:

我不知道是否有一个niifty .NET包装,但你可以调用使用P / Invoke的API的FormatMessage。

见这个答案如何它通常会从本机代码调用。 虽然这个问题指的是从抓住的HRESULT错误代码,得到的答案也适用于从GetLastError函数/ GetLastWin32Error未来的常规操作系统错误代码)retreiving码。

编辑:感谢Malfist指着我pinvoke.net,其中包括可供选择,管理API:

using System.ComponentModel;

string errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message;
Console.WriteLine(errorMessage);


Answer 2:

你可以采取从Winerror.h中的定义在伦斯勒理工学院 ,并把它们放到一个枚举:

public enum Win32ErrorCode : long
{
     ERROR_SUCCESS = 0L,
     NO_ERROR = 0L,
     ERROR_INVALID_FUNCTION = 1L,
     ERROR_FILE_NOT_FOUND = 2L,
     ERROR_PATH_NOT_FOUND = 3L,
     ERROR_TOO_MANY_OPEN_FILES = 4L,
     ERROR_ACCESS_DENIED = 5L,
     etc.
}

然后,如果你的错误代码是在一个变量ERROR_CODE你可以使用:

Enum.GetName(typeof(Win32ErrorCode), error_code);


Answer 3:

我虽然在寻找一个管理替代通过的P / Invoke调用的FormatMessage的登陆此页面上。

正如其他人所说,有没有办法让这些资本,强调名称,短的在Winerror.h中寻找他们,这是我所看到的在各个地方的在线转载,我在降落过程中搜索信息的有关解决特定状态码。 快速谷歌搜索,Winerror.h中,本身,发现了一个网页,在伦斯勒理工学院Instutute ,其中有人帮忙,提取从它的#define语句。

看着它给了我一个想法; 我认为有可能是一种方式到那里,从Winerror.h中的源代码,这是我的工作,作为Windows平台SDK的一部分附带的每一个新版本的Microsoft Visual Studio。

现在,我在那个把我带到这个页面的.NET程序集整理出一个紧迫的问题的中间。 然后,我会看看我能凑齐; 这种挑战是我熟悉的,有人扔下战书。



Answer 4:

是有,做一个函数,但我不记得它是什么。 在此同时,您可以使用错误查找工具(工具 - >错误查找),看看有什么特定的代码,在Visual Studio中表示。



文章来源: Getting the Windows System Error Code title/description from its hex number