Heim > Backend-Entwicklung > C++ > Wie übersetze ich Windows-API-Fehlercodes in für Menschen lesbare Textnachrichten?

Wie übersetze ich Windows-API-Fehlercodes in für Menschen lesbare Textnachrichten?

Linda Hamilton
Freigeben: 2024-11-18 09:15:02
Original
784 Leute haben es durchsucht

How to Translate Windows API Error Codes into Human-Readable Text Messages?

So rufen Sie Textfehlermeldungen von Fehlercodes in der Windows-API ab

In der Windows-API gibt die Funktion GetLastError() einen ganzzahligen Fehler zurück Code, der das Ergebnis eines Systemaufrufs angibt. Um eine für Menschen lesbare Fehlermeldung entsprechend diesem Code zu erhalten, können wir die folgenden Techniken anwenden:

Methode 1: Verwendung der Funktion FormatMessage()

Die FormatMessage( )-Funktion bietet eine bequeme Möglichkeit, Fehlercodes in Textnachrichten umzuwandeln. Es benötigt mehrere Parameter:

  • FORMAT_MESSAGE_ALLOCATE_BUFFER: Dieses Flag weist die Funktion an, einen Puffer für den Nachrichtentext zu reservieren.
  • NULL: Die Quelle der Nachricht.
  • errorMessageID: Der Fehlercode zum Abrufen der Nachricht für.
  • MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT): Gibt die sprachneutrale Version der Fehlermeldung an.
  • (LPSTR)&messageBuffer: Ein Zeiger auf den Puffer, der den Nachrichtentext empfängt .
  • 0: Die Größe des Puffers (wird ignoriert, wenn Das Flag FORMAT_MESSAGE_ALLOCATE_BUFFER ist gesetzt.
  • NULL: Reserviert; auf NULL gesetzt.

Beispielcode:

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

Das obige ist der detaillierte Inhalt vonWie übersetze ich Windows-API-Fehlercodes in für Menschen lesbare Textnachrichten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage