为什么FormatMessage()无法为WinINet错误find消息?

我正在运行这个testingFormatMessage :

LPVOID lpMsgBuf; errCode=12163; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM , 0, errCode, 0, (LPTSTR) &lpMsgBuf, 0, NULL ); 

但是,当它返回lpMsgBuf包含NULL …我期待像ERROR_INTERNET_DISCONNECTED 。

什么东西看起来不对? 谢谢。

Solutions Collecting From Web of "为什么FormatMessage()无法为WinINet错误find消息?"

这是一个WinINet错误,所以与它相关的信息住在WinINet.dll中。 你只需要告诉FormatMessage()这个以便它检索正确的消息:

 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 GetmoduleeHandle(_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 ); 

这是在WinINet文档的“处理错误”部分下的MSDN上正式记录。

请注意,如果您想要使用此例程来处理可能来自WinINet的错误,那么您可以将FORMAT_MESSAGE_FROM_SYSTEM标志添加回来:如果该标志就位, FormatMessage()将返回到系统消息表,如果错误不是在wininet.dll中找不到。 但是, 不要删除FORMAT_MESSAGE_IGNORE_INSERTS标志 。