Windows API 呼び出しから人間が判読できるエラー メッセージを取得するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-25 01:30:11
オリジナル
115 人が閲覧しました

How Can I Retrieve Human-Readable Error Messages from Windows API Calls?

Windows API 呼び出しから人間が判読できるエラー メッセージを取得する

Windows API を操作する場合、多くの場合、Windows API 呼び出しから返されたエラー コードに関連付けられたエラー メッセージを取得する必要があります。 GetLastError()。このエラー コードは整数値であり、人間が判読できるテキスト メッセージではありません。

エラー コードをデバッグやトラブルシューティングに役立つテキスト形式に変換するには、次のコード スニペットを使用できます。

//最後の Win32 エラーを文字列形式で返します。エラーがない場合は空の文字列を返します。<br>std::string GetLastErrorAsString()<br>{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">//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)&amp;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;
ログイン後にコピー

}

この関数GetLastErrorAsString() は、Windows API によって記録された最後のエラー コードに関連付けられたエラー メッセージを取得しようとします。まずエラー メッセージ ID を取得し、有効な場合は、FormatMessageA 関数を使用して人間が判読できる文字列に変換します。エラー メッセージは std::string オブジェクトに保存され、関数によって返されます。エラー メッセージが見つからない場合は、空の文字列が返されます。

以上がWindows API 呼び出しから人間が判読できるエラー メッセージを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート