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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top