ホームページ  >  記事  >  バックエンド開発  >  Windows API エラー コードを人間が読めるテキスト メッセージに変換するにはどうすればよいですか?

Windows API エラー コードを人間が読めるテキスト メッセージに変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-18 09:15:02722ブラウズ

How to Translate Windows API Error Codes into Human-Readable Text Messages?

Windows API のエラー コードからテキスト エラー メッセージを取得する方法

Windows API では、GetLastError() 関数は整数エラーを返します。システムコールの結果を示すコード。このコードに対応する人間が判読できるエラー メッセージを取得するには、次の手法を使用できます。

方法 1: FormatMessage() 関数を使用する

The FormatMessage( ) 関数は、エラー コードをテキスト メッセージに変換する便利な方法を提供します。いくつかのパラメータを取ります:

  • FORMAT_MESSAGE_ALLOCATE_BUFFER: このフラグは、メッセージ テキストにバッファを割り当てるように関数に指示します。
  • NULL: メッセージのソース。
  • errorMessageID: メッセージを取得するためのエラー コードfor.
  • MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT): エラー メッセージの言語中立バージョンを指定します。
  • (LPSTR)&messageBuffer: メッセージ テキストを受け取るバッファへのポインタ.
  • 0: バッファのサイズ ( FORMAT_MESSAGE_ALLOCATE_BUFFER フラグが設定されています)。
  • NULL: 予約済み。 NULL に設定します。

コード例:

//Returns the last Win32 error, in string format. Returns an empty string if there is no error.
std::string GetLastErrorAsString()
{
    //Get the error message ID, if any.
    DWORD errorMessageID = ::GetLastError();
    if(errorMessageID == 0) {
        return std::string(); //No error message has been recorded
    }
    
    LPSTR messageBuffer = nullptr;

    //Ask Win32 to give us the string version of that message ID.
    //The parameters we pass in, tell Win32 to create the buffer that holds the message for us (because we don't yet know how long the message string will be).
    size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
                                 NULL, errorMessageID, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&messageBuffer, 0, NULL);
    
    //Copy the error message into a std::string.
    std::string message(messageBuffer, size);
    
    //Free the Win32's string's buffer.
    LocalFree(messageBuffer);
            
    return message;
}

以上がWindows API エラー コードを人間が読めるテキスト メッセージに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。