Abrufen des Last-Error Codes
Wenn viele Systemfunktionen fehlschlagen, legen sie den Code für den letzten Fehler fest. Wenn Ihre Anwendung weitere Details zu einem Fehler benötigt, kann sie den Code des letzten Fehlers mithilfe der GetLastError-Funktion abrufen und mithilfe der FormatMessage-Funktion eine Beschreibung des Fehlers anzeigen.
Das folgende Beispiel enthält eine Fehlerbehandlungsfunktion, die die Fehlermeldung aus druckt und den Prozess beendet. Der lpszFunction-Parameter ist der Name der Funktion, die den Code für den letzten Fehler festgelegt hat.
#include <windows.h>
#include <strsafe.h>
void ErrorExit(LPTSTR lpszFunction)
{
// Retrieve the system error message for the last-error code
LPVOID lpMsgBuf;
LPVOID lpDisplayBuf;
DWORD dw = GetLastError();
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
dw,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0, NULL );
// Display the error message and exit the process
lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
(lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR));
StringCchPrintf((LPTSTR)lpDisplayBuf,
LocalSize(lpDisplayBuf) / sizeof(TCHAR),
TEXT("%s failed with error %d: %s"),
lpszFunction, dw, lpMsgBuf);
MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);
LocalFree(lpMsgBuf);
LocalFree(lpDisplayBuf);
ExitProcess(dw);
}
void main()
{
// Generate an error
if(!GetProcessId(NULL))
ErrorExit(TEXT("GetProcessId"));
}