Maison >développement back-end >C++ >Comment puis-je récupérer des messages d'erreur lisibles par l'homme à partir des appels d'API Windows ?

Comment puis-je récupérer des messages d'erreur lisibles par l'homme à partir des appels d'API Windows ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 01:30:11120parcourir

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

Récupération des messages d'erreur lisibles par l'homme à partir des appels de l'API Windows

Lors de l'interaction avec l'API Windows, il est souvent nécessaire de récupérer le message d'erreur associé à un code d'erreur renvoyé par GetLastError(). Ce code d'erreur est une valeur entière et non un message texte lisible par l'homme.

Pour convertir le code d'erreur en une forme textuelle, qui peut être plus utile pour le débogage et le dépannage, l'extrait de code suivant peut être utilisé :

//Renvoie la dernière erreur Win32, au format chaîne. Renvoie une chaîne vide s'il n'y a pas d'erreur.<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;

}

Cette fonction , GetLastErrorAsString(), tente de récupérer le message d'erreur associé au dernier code d'erreur enregistré par l'API Windows. Il récupère d'abord l'ID du message d'erreur et, s'il est valide, utilise la fonction FormatMessageA pour le convertir en une chaîne lisible par l'homme. Le message d'erreur est stocké dans un objet std::string et renvoyé par la fonction. Si aucun message d'erreur n'est trouvé, une chaîne vide est renvoyée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn