我使用的P / Invoke瞎搞一些窗口功能。 偶尔,我得到一个错误代码不是ERROR_SUCCESS(这样一个奇怪的名字)。
有没有办法在程序内看这些吗? Forexample,如果我得到错误1017.我可以告诉用户
该系统试图加载或还原文件到注册表,但指定的文件不是一个注册表文件格式。 (ERROR_NOT_REGISTRY_FILE:0x3F9)
代替
错误代码:1017
我使用的P / Invoke瞎搞一些窗口功能。 偶尔,我得到一个错误代码不是ERROR_SUCCESS(这样一个奇怪的名字)。
有没有办法在程序内看这些吗? Forexample,如果我得到错误1017.我可以告诉用户
该系统试图加载或还原文件到注册表,但指定的文件不是一个注册表文件格式。 (ERROR_NOT_REGISTRY_FILE:0x3F9)
代替
错误代码:1017
我不知道是否有一个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);
你可以采取从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);
我虽然在寻找一个管理替代通过的P / Invoke调用的FormatMessage的登陆此页面上。
正如其他人所说,有没有办法让这些资本,强调名称,短的在Winerror.h中寻找他们,这是我所看到的在各个地方的在线转载,我在降落过程中搜索信息的有关解决特定状态码。 快速谷歌搜索,Winerror.h中,本身,发现了一个网页,在伦斯勒理工学院Instutute ,其中有人帮忙,提取从它的#define语句。
看着它给了我一个想法; 我认为有可能是一种方式到那里,从Winerror.h中的源代码,这是我的工作,作为Windows平台SDK的一部分附带的每一个新版本的Microsoft Visual Studio。
现在,我在那个把我带到这个页面的.NET程序集整理出一个紧迫的问题的中间。 然后,我会看看我能凑齐; 这种挑战是我熟悉的,有人扔下战书。
是有,做一个函数,但我不记得它是什么。 在此同时,您可以使用错误查找工具(工具 - >错误查找),看看有什么特定的代码,在Visual Studio中表示。