Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menerjemahkan Kod Ralat API Windows ke dalam Mesej Teks Boleh Dibaca Manusia?

Bagaimana untuk Menerjemahkan Kod Ralat API Windows ke dalam Mesej Teks Boleh Dibaca Manusia?

Linda Hamilton
Linda Hamiltonasal
2024-11-18 09:15:02722semak imbas

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

Cara Mendapatkan Mesej Ralat Teks daripada Kod Ralat dalam API Windows

Dalam API Windows, fungsi GetLastError() mengembalikan ralat integer kod yang menunjukkan hasil panggilan sistem. Untuk mendapatkan mesej ralat yang boleh dibaca manusia yang sepadan dengan kod ini, kami boleh menggunakan teknik berikut:

Kaedah 1: Menggunakan Fungsi FormatMessage()

The FormatMessage( ) fungsi menyediakan cara mudah untuk menukar kod ralat kepada mesej teks. Ia memerlukan beberapa parameter:

  • FORMAT_MESSAGE_ALLOCATE_BUFFER: Bendera ini mengarahkan fungsi untuk memperuntukkan penimbal untuk teks mesej.
  • NULL: Sumber mesej.
  • errorMessageID: Kod ralat untuk mendapatkan semula mesej untuk.
  • MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT): Menentukan versi neutral bahasa bagi mesej ralat.
  • (LPSTR)&messageBuffer: Penunjuk kepada penimbal yang akan menerima teks mesej .
  • 0: Saiz penimbal (diabaikan jika Bendera FORMAT_MESSAGE_ALLOCATE_BUFFER ditetapkan).
  • NULL: Terpelihara; ditetapkan kepada NULL.

Kod Contoh:

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

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