Home >Backend Development >C++ >How Can I Retrieve Human-Readable Error Messages from Windows API Calls?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-25 01:30:11121browse

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

Retrieving Human-Readable Error Messages from Windows API Calls

When interacting with the Windows API, it's often necessary to retrieve the error message associated with an error code returned by GetLastError(). This error code is an integer value, not a human-readable text message.

To convert the error code into a textual form, which can be more useful for debugging and troubleshooting, the following code snippet can be employed:

//Returns the last Win32 error, in string format. Returns an empty string if there is no error.<br>std::string GetLastErrorAsString()<br>{</p>
<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;

}

This function, GetLastErrorAsString(), attempts to retrieve the error message associated with the last error code recorded by the Windows API. It first retrieves the error message ID and, if valid, uses the FormatMessageA function to convert it into a human-readable string. The error message is stored in a std::string object and returned by the function. If no error message is found, an empty string is returned.

The above is the detailed content of How Can I Retrieve Human-Readable Error Messages from Windows API Calls?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn