Apabila berinteraksi dengan API Windows, selalunya perlu untuk mendapatkan semula mesej ralat yang dikaitkan dengan kod ralat yang dikembalikan oleh GetLastError(). Kod ralat ini ialah nilai integer, bukan mesej teks yang boleh dibaca manusia.
Untuk menukar kod ralat kepada bentuk teks, yang boleh menjadi lebih berguna untuk penyahpepijatan dan penyelesaian masalah, coretan kod berikut boleh digunakan:
//Mengembalikan ralat Win32 terakhir, dalam format rentetan. Mengembalikan rentetan kosong jika tiada ralat.<br>std::string GetLastErrorAsString()<br>{</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">//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;
}
Fungsi ini , GetLastErrorAsString(), cuba mendapatkan semula mesej ralat yang dikaitkan dengan kod ralat terakhir yang direkodkan oleh API Windows. Ia mula-mula mendapatkan semula ID mesej ralat dan, jika sah, menggunakan fungsi FormatMessageA untuk menukarnya menjadi rentetan yang boleh dibaca manusia. Mesej ralat disimpan dalam objek std::string dan dikembalikan oleh fungsi. Jika tiada mesej ralat ditemui, rentetan kosong dikembalikan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Mesej Ralat Boleh Dibaca Manusia daripada Panggilan API Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!