19

我正在运行它来测试FormatMessage

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这样的东西。

有什么看起来不对劲吗?谢谢。

4

1 回答 1

30

这是一个 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
   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 );

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

请注意,FORMAT_MESSAGE_FROM_SYSTEM如果您想将此例程用于可能来自或可能不是来自 WinINet 的错误,则可以重新添加标志:使用该标志,FormatMessage()如果在wininet.dll。但是,不要删除FORMAT_MESSAGE_IGNORE_INSERTS标志

于 2010-01-29T02:22:48.467 回答