Получение системы Windows ошибка код название/описание от его шестнадцатиричное число



Я путаюсь с некоторыми функциями windows, используя p / invoke. Иногда я получаю код ошибки, который не является ERROR_SUCCESS (такое странное имя).



Есть ли способ посмотреть их в программе? Например, если я получу ошибку 1017. Могу ли я сказать пользователю




Система попыталась загрузить или
восстановить файл в реестре, но
указанный файл не находится в
формат файла реестра.
(ERROR_NOT_REGISTRY_FILE: 0x3F9)




Вместо




Код Ошибки: 1017


619   4  

4 ответов:

Я не уверен, что существует оболочка niifty .NET, но вы можете вызвать API FormatMessage с помощью P / Invoke.

СмотритеЭтот ответ для того, как он обычно вызывается из собственного кода. Хотя вопрос относится к захвату кодов ошибок из HRESULTs, ответ также применим для восстановления кодов из обычных кодов ошибок ОС, поступающих из GetLastError/GetLastWin32Error).

EDIT: спасибо 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);

Я приземлился на этой странице в поисках управляемой альтернативы вызову FormatMessage через P/Invoke.

Как говорили другие, нет никакого способа получить эти заглавные, подчеркнутые имена, кроме поиска их в winerror.h, который я видел воспроизведенным в интернете в различных местах, где я приземлился в ходе поиска информации о разрешении конкретных кодов состояния. Быстрый поиск в Google, для winerror.h, сам, раскрыл страницу, в Rensselaer Polytechnic Instutute , где кто-то услужливо извлек из него операторы #define.

Глядя на него, я получил идею; я думаю, что может быть способ добраться туда, работая с исходным кодом winerror.h, который у меня есть, как часть пакета SDK платформы Windows, который поставляется с каждой последней версией Microsoft Visual Studio.

Прямо сейчас я нахожусь в середине разбора насущной проблемы в сборке .NET, которая привела меня на эту страницу. А потом я посмотрю, что смогу сделать.; этот вид вызова прямо по моей части, и кто-то бросил перчатку.

Да, есть функция, которая делает это, но я не помню, что это такое. В то же время вы можете использовать средство поиска ошибок (Tools->Error Lookup), чтобы узнать, что означает конкретный код в Visual Studio.

Comments

    Ничего не найдено.