Как найти правильный код ошибки системы Windows для использования в моем приложении? - PullRequest
3 голосов
/ 29 сентября 2010

Я пишу приложение на C # .NET 2.0, в котором ожидается получение сообщения через SerialPort. Если кадр не получен (то есть время ожидания истекло) или он определен как недействительный, мне нужно установить код ошибки, используя SetLastError. Windows имеет множество кодов ошибок. Есть ли простой инструмент или справочник, который поможет сузить правильный код ошибки для использования?

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Хотя выбрасывать исключение и обрабатывать его выше в стеке, я предпочитаю, но в данном случае это не вариант, потому что приложение, которое я обновляю, не было разработано для использования такой полезной функции.

Ответы [ 4 ]

3 голосов
/ 17 января 2014

К сожалению, вышеописанное не сработало для меня, однако это сработало идеально для меня, вставив весь код, чтобы его можно было скопировать и вставить непосредственно в C #

public static class WinErrors
{
    /// <summary>
    /// Gets a user friendly string message for a system error code
    /// </summary>
    /// <param name="errorCode">System error code</param>
    /// <returns>Error string</returns>
    public static string GetSystemMessage(uint errorCode)
    {
        var exception = new Win32Exception((int)errorCode);
        return exception.Message;
    }
}
2 голосов
/ 05 августа 2011
using System.Runtime.InteropServices;       // DllImport

public static string GetSystemMessage(int errorCode) {
int capacity = 512;
int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
StringBuilder sb = new StringBuilder(capacity);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, IntPtr.Zero, errorCode, 0,
    sb, sb.Capacity, IntPtr.Zero);
int i = sb.Length;
if (i>0 && sb[i - 1] == 10) i--;
if (i>0 && sb[i - 1] == 13) i--;
sb.Length = i;
return sb.ToString();
}

[DllImport("kernel32.dll")]
public static extern int FormatMessage(int dwFlags, IntPtr lpSource, int dwMessageId,
    int dwLanguageId, StringBuilder lpBuffer, int nSize, IntPtr Arguments);
0 голосов
/ 26 апреля 2011

в «старые добрые времена» (C и C ++) список возможных ошибок Windows был определен в winerror.h

ОБНОВЛЕНИЕ: Ссылка ниже не работает. Не уверен, что файл все еще доступен для загрузки, но все определения кода системной ошибки Windows можно найти по этой ссылке.

Этот файл можно найти на сайте Microsoft (хотя меня немного удивляет, что он датируется еще 2003 годом - возможно, стоит поискать более свежую версию).

Но если вы получаете (или хотите установить) коды ошибок Win32, это будет то место, где найдено определение.

0 голосов
/ 29 сентября 2010

Вы можете найти их список здесь:

http://en.kioskea.net/faq/2347-error-codes-in-windows

Затем просто выполните поиск «Serial» и используйте тот, который лучше всего подходит для вашей ошибки

...