FormatMessage()
都对我不起作用。当我遇到错误 12002 时,lpBuffer
始终返回为 NULL。这是我的代码:
LPTSTR lpBuffer = NULL;
DWORD dwError = GetLastError();
int nResult = 0;
if (dwError >= 12000 && dwError <= 12174)
{
nResult = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE,
GetModuleHandle("wininet.dll"), dwError, 0, (LPTSTR)&lpBuffer, 0, NULL);
}
else
{
nResult = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpBuffer, 0, NULL);
}
有人有什么想法吗?
根据 WinNet 的文档:
处理错误
若要获取错误的错误文本,请调用
FormatMessage
函数,向其传递HMODULE
句柄以Wininet.dll
,可以使用GetModuleHandle
函数获取该句柄。
这与Microsoft的系统文档形成鲜明对比:
系统错误代码 (12000-15999(
以下列表描述了系统错误代码(错误 12000 到 15999(。当许多函数失败时,
GetLastError
函数会返回它们。若要检索应用程序中错误的说明文本,请使用带有FORMAT_MESSAGE_FROM_SYSTEM
标志的FormatMessage
函数。
这在逻辑上包括 12000-12175 范围内的 WinInet 错误代码,但实际上它仅适用于少数选定的 WinInet 错误。
另请注意,WinInet 和 WinHTTP 共享相同的 12xxx 范围错误代码。错误代码 12002 是 WinHTTP 错误代码:
ERROR_WINHTTP_TIMEOUT
12002
年 此错误可能会作为 TCP/IP 超时行为的结果返回,而不考虑 Windows HTTP 服务中设置的超时值。
以及WinInet错误代码:
ERROR_INTERNET_TIMEOUT
12002
年请求已超时。
您没有指明您正在使用哪个库。确保在调用 FormatMessage()
时使用正确的模块。如果从 WinInet 函数收到错误,请使用 wininet.dll
。如果从 WinHTTP 函数收到错误,请使用 winhttp.dll
。