Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menerjemahkan Kod Ralat API Windows kepada Mesej Ralat Boleh Dibaca Manusia?

Bagaimana untuk Menerjemahkan Kod Ralat API Windows kepada Mesej Ralat Boleh Dibaca Manusia?

Linda Hamilton
Linda Hamiltonasal
2024-11-22 05:57:13950semak imbas

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

Mengambil semula Mesej Ralat daripada Kod Ralat: Menyahmistikan GetLastError()

Soalan:

Selepas menggunakan fungsi Windows API, bagaimana kita boleh mengakses mesej ralat yang sepadan dalam a format teks yang boleh difahami? GetLastError() hanya menyediakan kod ralat berangka.

Jawapan:

Untuk menukar kod ralat berangka yang dilaporkan oleh GetLastError() kepada perwakilan rentetan yang bermakna, kami menggunakan yang berikut langkah:

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

    LPSTR messageBuffer = nullptr;

    //Request Win32 to translate the error ID into a string representation
    //We specify options to allocate the message buffer dynamically and retrieve the localized system message
    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 string
    std::string message(messageBuffer, size);

    //Release the dynamically allocated buffer used by Win32
    LocalFree(messageBuffer);

    return message;
}

Atas ialah kandungan terperinci Bagaimana untuk Menerjemahkan Kod Ralat API Windows kepada Mesej Ralat 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