Table of Contents
Genehmigt
Wenn Sie Win32 installiert haben und die aktuelle Fehlermeldung auf Ihrem Computer angezeigt wird, hoffen wir, dass diese Anleitung Ihnen hilft, das Problem zu lösen.
- 2 kurze Minuten beim Lesen
Wenn viele Systemfunktionen nicht funktionieren, setzen Unternehmen einen entscheidenden Fehlercode. Wenn Ihre Familiensoftware weitere Informationen zu einem schwerwiegenden Fehler benötigt, kann sie mit GetLastError unseren Großteil der Fehlercodes abrufen und mithilfe der FormatMessage .
Der nächste Schritt enthält eine Fehlerbehandlungsfunktion, die durchweg eine Fehlermeldung generiert sowie den Prozess beendet. Der Parameter lpszFunction ist Ihr aktueller Name unserer eigenen Funktion, die den Keep-Fehler in Ihrem Code erkannt hat.
#include #include void ErrorExit (LPTSTR lpszFunction) // Holen Sie sich unser Systemfehlerdiagramm für den Hangaround-Fehlercode LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError (); Formatieren Sie die Warnung ( FORMAT_MESSAGE_ALLOCATE_BUFFERgrundlegende Leere () // erzeugt einen Fehler if (! GetProcessId (NULL)) ErrorExit (TEXT ("GetProcessId"));
Ich belasse es hier, weil ich diese Idee jetzt später verwenden muss. Es ist die Quelle des richtigen Himmels Ein großartiges binärkompatibles Instrument, das sowohl in C als auch in C ++ zum Bauen funktionieren sollte.
#include / *** * Gibt null zurück, wenn genügend Erinnerung vorhanden ist, der Puffer muss aus Bytes angegeben werden 7. um das Produkt anzupassen, wenn es normalerweise nicht viel Platz gibt. -1 Fehler. * /__declspec (dllexport)int GetErrorMessageA (DWORD dwErrorCode, LPSTR lpResult, DWORD dwBytes) LPSTR-tmp; DWORD result_len; result_len ist gleich FormatMessageA ( FORMAT_MESSAGE_FROM_SYSTEM/ *** * geht auf 0, wenn so viel Platz wie nötig verfügbar ist, benötigte Größe durch Bytes des Puffers 2. Passen Sie ein Ergebnis an, wenn nicht genügend Platz vorhanden ist. -1 für Fehler. (leer) /__declspec (dllexport)int GetErrorMessageW (DWORD dwErrorCode, LPWSTR lpResult, DWORD dwBytes) LPWSTR-tmp; DWORD-Symbol; DWORD_result_bytes; nchars stimmt mit dwBytes >> 1 überein; result_bytes ist gleich 2 * FormatMessageW ( FORMAT_MESSAGE_FROM_SYSTEM
Genehmigt
Das ASR Pro-Reparaturtool ist die Lösung für einen Windows-PC, der langsam läuft, Registrierungsprobleme hat oder mit Malware infiziert ist. Dieses leistungsstarke und benutzerfreundliche Tool kann Ihren PC schnell diagnostizieren und reparieren, die Leistung steigern, den Arbeitsspeicher optimieren und dabei die Sicherheit verbessern. Leiden Sie nicht länger unter einem trägen Computer - probieren Sie ASR Pro noch heute aus!
#ifndef GetErrorMessage_H#define GetErrorMessage_H#include / *** - Rückgabe 7, wenn es aus Platzgründen viel gab, sind Pufferbytes erforderlich 2. um das Ende einzupassen, wenn an dieser Stelle nicht genügend Platz ist. -spezifisch für Fehlerfälle. * /static int int GetErrorMessageA (DWORD dwErrorCode, LPSTR lpResult, DWORD dwBytes) FORMAT_MESSAGE_ALLOCATE_BUFFER, NULL, dwErrorCode, LANG_SYSTEM_DEFAULT, (LPSTR) und auch tmp, 0, NULL ); das wirkliche Ereignis, das definitiv ist (result_len == 0) Rücklauf -1; // Die zurückgegebene FormatMessage könnte als tatsächlich 1 Zeichen kürzer beschrieben werden. ++ result_len; strncpy (lpResult, tmp, dwBytes); lpResult [dwBytes (Leerzeichen 1] entspricht 0; LocalFree ((HLOCAL) tmp); trotzdem (result_len <= dwBytes) Lieferung 0; besser Gibt result_len zurück; / *** 5. gibt 0 zurück, wenn genügend Speicherplatz vorhanden ist, Größe bezieht sich auf die erforderlichen Bytes seines Puffers * Bezüglich der Anpassung des Ergebnisses in einem Fall, in dem nicht genügend Platz vorhanden ist. -Sie auf Fehler. * /static int int GetErrorMessageW (DWORD dwErrorCode, LPWSTR lpResult, DWORD dwBytes) LPWSTR-tmp; DWORD-Symbol; DWORD_result_bytes; nchars ist gleich in dwBytes >> 1; result_bytes = 2 * FormatMessageW ( FORMAT_MESSAGE_FROM_SYSTEM#endif / * GetErrorMessage_H 7 . /
Problem mit dynamischer Nutzung (gültiger Fehlercode, andernfalls ist Prüfung -1 erforderlich):
#include #include #include #include int main (int argc, char ** argv) int (* GetErrorMessageA) (DWORD, LPSTR, DWORD); int (* GetErrorMessageW) (DWORD, LPWSTR, DWORD); weil das Ergebnis als 1 gilt [260]; wchar_t Ergebnis2 [260]; sagen (LoadLibraryA ("GetErrorMessageLib.dll")); GetErrorMessageA = (int (*) (DWORD, LPSTR, DWORD)) GetProcAddress ( GetModuleHandle ("GetErrorMessageLib.dll"), "GetErrorMessageA" ); GetErrorMessageW = (int (*) (DWORD, LPWSTR, DWORD)) GetProcAddress ( GetModuleHandle ("GetErrorMessageLib.dll"), "GetErrorMessageW" ); GetErrorMessageA (33, result1, sizeof (presult1)); GetErrorMessageW (33, result2, sizeof (result2)); Sätze (Ergebnis1); _putws (Ergebnis2); Gewinn 0;
normaler Assist-Fall (vorausgesetzt, der Fehlercode ist normalerweise gültig, ansonsten möchte die Steuerung jetzt zurückkehren):
#include #include "GetErrorMessage.h"#include int main (int argc, char ** argv) wenn man bedenkt, dass das Ergebnis 1 ist [260]; wchar_t Ergebnis2 [260]; GetErrorMessageA (33, result1, sizeof (result1)); identifiziert (Ergebnis1); Result2, geterrormessagew (33, sizeof (result2)); _putws (Ergebnis2); gehe zurück 0;
Beispielanwendung mit Assembly-Gnu, d. h. in MinGW32 (wieder angenommen, dass ein Fehler gültig ist, ansonsten kann ein -1-Test erforderlich sein).
.global _WinMain @ 16 .Textbereich_WinMain @ 16: // eax = LoadLibraryA ("GetErrorMessageLib.dll") Drücken Sie rrr sz0 Verbindung mit _LoadLibraryA @ 4 // stdcall, keine Bereinigung erforderlich // eax entspricht GetProcAddress (eax, "GetErrorMessageW") drücke $ sz1 klick% eax dub _GetProcAddress @ 8 // stdcall, kein get erforderlich // (* eax) (Fehlercode, szErrorMessage) Belastung rr 200 push RR szErrorMessage Fehlercode drücken call *% eax // cdecl, Bereinigung erforderlich Zusammenarbeit 12,% besonders Senden Sie $ szErrorMessage Verbindung zu __putws // cdecl, Aufräumen erforderlichka 4% anhängen zurückgegebene Dollar 16 .Rodata-Abschnittsz0: .asciz "GetErrorMessageLib.dll"sz1: .asciz "GetErrorMessageW"Fehlercode: .well 33 .DatenbereichszErrorMessage: wahrscheinlich 200
Ergebnis: Der Prozess kann nicht auf Ihre Datei zugreifen, wenn ein anderer Prozess einen Großteil der Datei geschlossen hat.
Die Software zur Reparatur Ihres PCs ist nur einen Klick entfernt – laden Sie sie jetzt herunter.