3

私はC#.NET 2.0アプリケーションを作成しています。このアプリケーションでは、メッセージが。を介して受信されることが予想されますSerialPort。フレームが受信されない(つまりタイムアウトする)場合、またはフレームが無効であると判断された場合は、を使用してエラーコードを設定する必要がありますSetLastError。Windowsには多数のエラーコードがあります。使用する適切なエラーコードを絞り込むのに役立つ簡単なツールまたはリファレンスはありますか?

追加情報

例外をスローしてスタックの上位で処理するのが私の好みですが、更新しているアプリケーションはそのような便利な機能を利用するように設計されていないため、この場合はオプションではありません。

4

4 に答える 4

5

残念ながら、上記は私にはうまくいきませんでしたが、これは私にとっては完璧に機能し、コード全体を貼り付けて、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;
    }
}
于 2014-01-16T22:26:12.453 に答える
2
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);
于 2011-08-05T13:51:04.937 に答える
0

あなたはそれらすべてのリストをここで見つけることができます:

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

次に、「シリアル」を検索して、エラーに最も適したものを使用します

于 2010-09-29T16:51:45.083 に答える
0

「古き良き時代」(CおよびC ++)では、考えられるWindowsエラーのリストはwinerror.hで定義されていました。

更新:以下のリンクは無効です。ファイルがまだダウンロード可能かどうかはわかりませんが、すべてのWindowsシステムエラーコードの定義はこのリンクにあります。

このファイルはMicrosoftのサイトで見つけることができます(2003年までさかのぼることに少し驚いていますが、より新しいバージョンを探す価値があるかもしれません)。

ただし、Win32エラーコードを取得している(または設定したい)場合は、ここに定義があります。

于 2011-04-26T09:27:47.277 に答える