Как мне найти правильный код ошибки системы Windows для использования в моем приложении?

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

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

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

4 ответа

Решение

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

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

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

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

К сожалению, вышеупомянутое не сработало для меня, однако это сработало идеально для меня, вставив весь код, чтобы его можно было копировать и вставлять непосредственно в 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;
    }
}
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);

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

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

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

Другие вопросы по тегам