Pourquoi FormatMessage () ne trouve-t-il pas un message pour les erreurs Wininet?
-
23-09-2019 - |
Question
J'exécute ceci pour tester FormatMessage:
LPVOID lpMsgBuf;
errCode=12163;
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM ,
0,
errCode,
0,
(LPTSTR) &lpMsgBuf,
0, NULL );
Cependant, quand il revient lpMsgBuf
contient null ... je m'attendais à quelque chose comme Error_internet_disconnected.
Quelque chose ne va pas? Merci.
La solution
C'est une erreur Wininet, et donc le message qui y est associé vit dans wininet.dll. Il vous suffit de parler de FormatMessage () à ce sujet pour qu'il récupére le message correct:
FormatMessage(
// flags:
FORMAT_MESSAGE_ALLOCATE_BUFFER // allocate buffer (free with LocalFree())
| FORMAT_MESSAGE_IGNORE_INSERTS // don't process inserts
| Format_message_from_hmodule, // Récupérer le message à partir de DLL spécifiée
// 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 );
Ceci est officiellement documenté sur MSDN sous le Section "Gestion des erreurs" de la documentation Wininet.
Notez que vous pouvez ajouter le FORMAT_MESSAGE_FROM_SYSTEM
Incorporer si vous souhaitez utiliser cette routine pour les erreurs qui peuvent ou peuvent ne pas sont venus de Wininet: avec ce drapeau en place, FormatMessage()
Retournera la table des messages système si l'erreur n'est pas trouvée dans wininet.dll. Cependant, fais ne pas Supprimer le Format_Message_Ignore_inserts Flag.