windows程序员想要知道系统出错信息,一般使用GetLastError()来获取,该API获取的是错误码,如通过GetLastError返回123 我们可以查询VS自带工具errorloop得到出错码123的错误信息:文件名、目录名或卷标语法不正确。这是一件挺麻烦的事。所以如果开发过程中我们能直接得到错误码的错误信息,那就好了,下文正是实现如此功能。
void ErrorShowString(DWORD dwErrorCode,LPSTR szErrorStr)
{
DWORD dwError=dwErrorCode;
HLOCAL hlocal=NULL;
DWORD systemLocale=MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL);
BOOL bOK=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|
FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,dwError,systemLocale,(PTSTR)&hlocal,0,NULL);
if (!bOK)
{
HMODULE hDll=LoadLibraryEx("netmsg.dll",NULL,DONT_RESOLVE_DLL_REFERENCES);
if(hDll)
{
bOK=FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_HMODULE|
FORMAT_MESSAGE_IGNORE_INSERTS,hDll,dwError,systemLocale,(PTSTR)hlocal,0,NULL);
FreeLibrary(hDll);
}
}
if (bOK&&(hlocal))
{
lstrcpy(szErrorStr,(PCSTR)LocalLock(hlocal));
LocalFree(hlocal);
}
else
{
lstrcpy(szErrorStr,"未知的错误");
}
}