首頁 >後端開發 >C++ >如何將 Windows GetLastError() 錯誤代碼轉換為人類可讀的訊息?

如何將 Windows GetLastError() 錯誤代碼轉換為人類可讀的訊息?

Susan Sarandon
Susan Sarandon原創
2024-11-19 20:38:03936瀏覽

How Can I Convert Windows GetLastError() Error Codes into Human-Readable Messages?

如何解釋GetLastError() 傳回的錯誤代碼

呼叫Windows API 後,開發人員可能會遇到錯誤狀況,需要了解底層的情況失敗的原因至關重要。本機 Win32 API 函數 GetLastError() 提供錯誤代碼,但此代碼表示為整數,因此很難破解其含義。

將錯誤代碼轉換為文字訊息

為了獲得人類可讀的錯誤訊息,開發人員需要一種機制將這些數字錯誤代碼轉換為文字描述。下面的程式碼片段展示了此轉換過程:

#include <windows.h>
#include <string>

std::string GetLastErrorAsString()
{
    // Retrieve the error message ID, if available.
    DWORD errorMessageID = ::GetLastError();
    if (errorMessageID == 0) {
        return std::string(); // No error message has been recorded.
    }
    
    LPSTR messageBuffer = nullptr;

    // Instruct Win32 to generate the message string for the provided error ID.
    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);
    
    // Transfer the error message into a std::string.
    std::string message(messageBuffer, size);
    
    // Deallocate Win32's message buffer.
    LocalFree(messageBuffer);
            
    return message;
}

用法:

要使用此函數,只需在任何可能傳回錯誤程式碼。它將傳回一個包含文字錯誤訊息的 std::string,然後可以將其顯示給使用者或記錄以進行進一步的診斷。

以上是如何將 Windows GetLastError() 錯誤代碼轉換為人類可讀的訊息?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn