首頁  >  文章  >  後端開發  >  如何將 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() 函數

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中文網其他相關文章!

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