Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Dapatkan Mesej Ralat Boleh Dibaca Manusia daripada Panggilan API Windows?

Bagaimanakah Saya Boleh Dapatkan Mesej Ralat Boleh Dibaca Manusia daripada Panggilan API Windows?

Susan Sarandon
Lepaskan: 2024-11-25 01:30:11
asal
160 orang telah melayarinya

How Can I Retrieve Human-Readable Error Messages from Windows API Calls?

Mengambil semula Mesej Ralat Boleh Dibaca Manusia daripada Panggilan API Windows

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)&amp;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;
Salin selepas log masuk

}

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan