我正在运行它来测试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之类的内容。
有什么不对劲?感谢。
答案 0 :(得分:26)
这是一个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 );
这是在WinDNet文档的"Handling Errors" section下在MSDN上正式记录的。
请注意,如果您希望将此例程用于可能或可能 来自WinINet的错误,您可以重新添加FORMAT_MESSAGE_FROM_SYSTEM
标志:使用该标志,{如果在wininet.dll中找不到错误,{1}}将回退到系统消息表。但是,do not remove the FORMAT_MESSAGE_IGNORE_INSERTS flag。