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);
}
有人有什么想法吗?
答案 0 :(得分:2)
根据WinInet的文档:
要获取错误的错误文本,请调用
FormatMessage
函数,并向HMODULE
传递Wininet.dll
句柄,可以使用GetModuleHandle
函数获得该句柄。
与Microsoft的系统文档相反:
System Error Codes (12000-15999)
以下列表描述了系统错误代码(错误12000至15999 )。当许多函数失败时,它们由
GetLastError
函数返回。 要在应用程序中检索错误的描述文字,请使用带有FormatMessage
标志的FORMAT_MESSAGE_FROM_SYSTEM
函数。
从逻辑上讲,这将包括12000-12175范围内的WinInet错误代码,但实际上,它仅适用于少数几种WinInet错误。
还要注意,WinInet和WinHTTP共享相同的12xxx范围的错误代码。错误代码12002是WinHTTP error code:
ERROR_WINHTTP_TIMEOUT
12002
无论Windows HTTP Services中设置了什么超时值,都可能由于TCP / IP超时行为而返回此错误。
ERROR_INTERNET_TIMEOUT
12002
请求已超时。
您没有指出正在使用哪个库。调用FormatMessage()
时,请确保使用正确的模块。如果WinInet函数出错,请使用wininet.dll
。如果从WinHTTP函数收到错误消息,请使用winhttp.dll
。