Ich führe das zum Testen aus FormatNachricht:
LPVOID lpMsgBuf;
errCode=12163;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM ,
0,
errCode,
0,
(LPTSTR) &lpMsgBuf,
0, NULL );
Allerdings, wenn es zurückkehrt lpMsgBuf
enthält NULL … Ich hatte so etwas erwartet ERROR_INTERNET_DISCONNECTED.
Sieht irgendetwas falsch aus? Vielen Dank.
Das ist ein WinINet-Fehler, und die damit verbundene Meldung befindet sich in WinINet.dll. Sie müssen FormatMessage() nur darüber informieren, damit es die richtige Nachricht abruft:
FormatMessage(
// flags:
FORMAT_MESSAGE_ALLOCATE_BUFFER // allocate buffer (free with LocalFree())
| FORMAT_MESSAGE_IGNORE_INSERTS // don't process inserts
| FORMAT_MESSAGE_FROM_HMODULE, // retrieve message from specified DLL
// module to retrieve message text from
GetModuleHandle(_T("wininet.dll")),
// error code to look up
errCode,
// default language
0,
// address of location to hold pointer to allocated buffer
(LPTSTR)&lpMsgBuf,
// no minimum size
0,
// no arguments
NULL );
Dies ist offiziell auf MSDN unter der dokumentiert Abschnitt “Behandlung von Fehlern”. der WinINet-Dokumentation.
Beachten Sie, dass Sie die hinzufügen können FORMAT_MESSAGE_FROM_SYSTEM
Flag wieder ein, wenn Sie diese Routine für möglicherweise oder möglicherweise auftretende Fehler verwenden möchten nicht von WinINet gekommen sind: mit diesem Flag an Ort und Stelle, FormatMessage()
greift auf die Systemmeldungstabelle zurück, wenn der Fehler nicht in wininet.dll gefunden wird. Jedoch, tun nicht Entfernen Sie das FORMAT_MESSAGE_IGNORE_INSERTS-Flag.