Maison  >  Article  >  développement back-end  >  Comment puis-je convertir les codes d'erreur Windows GetLastError() en messages lisibles par l'homme ?

Comment puis-je convertir les codes d'erreur Windows GetLastError() en messages lisibles par l'homme ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-19 20:38:03902parcourir

How Can I Convert Windows GetLastError() Error Codes into Human-Readable Messages?

Comment interpréter les codes d'erreur renvoyés par GetLastError()

Après avoir appelé un appel d'API Windows, les développeurs peuvent rencontrer des situations d'erreur où la compréhension du sous-jacent la raison de l’échec est cruciale. La fonction native de l'API Win32 GetLastError() fournit un code d'erreur, mais ce code est représenté sous forme d'entier, ce qui rend difficile le déchiffrement de sa signification.

Conversion des codes d'erreur en messages textuels

Pour obtenir un message d'erreur lisible par l'homme, les développeurs ont besoin d'un mécanisme pour convertir ces codes d'erreur numériques en descriptions textuelles. L'extrait de code ci-dessous présente ce processus de conversion :

#include <windows.h>
#include <string>

std::string GetLastErrorAsString()
{
    // Retrieve the error message ID, if available.
    DWORD errorMessageID = ::GetLastError();
    if (errorMessageID == 0) {
        return std::string(); // No error message has been recorded.
    }
    
    LPSTR messageBuffer = nullptr;

    // Instruct Win32 to generate the message string for the provided error ID.
    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);
    
    // Transfer the error message into a std::string.
    std::string message(messageBuffer, size);
    
    // Deallocate Win32's message buffer.
    LocalFree(messageBuffer);
            
    return message;
}

Utilisation :

Pour utiliser cette fonction, appelez simplement GetLastErrorAsString() après tout appel d'API pouvant renvoyer un code d'erreur. Il renverra une std::string contenant le message d'erreur textuel, qui pourra ensuite être affiché à l'utilisateur ou enregistré pour des diagnostics plus approfondis.

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