Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menukar Kod Ralat Windows GetLastError() kepada Mesej Boleh Dibaca Manusia?

Bagaimanakah Saya Boleh Menukar Kod Ralat Windows GetLastError() kepada Mesej Boleh Dibaca Manusia?

Susan Sarandon
Susan Sarandonasal
2024-11-19 20:38:03935semak imbas

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

Cara Mentafsir Kod Ralat yang Dikembalikan oleh GetLastError()

Selepas menggunakan panggilan API Windows, pembangun mungkin menghadapi situasi ralat di mana memahami asas sebab kegagalan adalah penting. Fungsi Win32 API asli GetLastError() menyediakan kod ralat, tetapi kod ini diwakili sebagai integer, menjadikannya sukar untuk menghuraikan maksudnya.

Menukar Kod Ralat kepada Mesej Tekstual

Untuk mendapatkan mesej ralat yang boleh dibaca manusia, pembangun memerlukan mekanisme untuk menukar kod ralat berangka ini kepada penerangan teks. Coretan kod di bawah mempamerkan proses penukaran ini:

#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;
}

Penggunaan:

Untuk menggunakan fungsi ini, cuma panggil GetLastErrorAsString() selepas sebarang panggilan API yang mungkin mengembalikan kod ralat. Ia akan mengembalikan std::rentetan yang mengandungi mesej ralat teks, yang kemudiannya boleh dipaparkan kepada pengguna atau dilog untuk diagnostik lanjut.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menukar Kod Ralat Windows GetLastError() kepada Mesej Boleh Dibaca Manusia?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn