void seeLastError(DWORD ERRORNO)
{
HLOCAL hlocal=NULL;
DWORD systemLocal=MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL);
//Get the error code's textual description
BOOL fOk = FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS
|FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,ERRORNO,systemLocal,
(PTSTR)&hlocal,0,NULL);
if (!fOk)
{
//Is it a network-related error
HMODULE hDll=LoadLibraryEx(_T("netmsg.dll"),NULL,
DONT_RESOLVE_DLL_REFERENCES);
if (hDll!=NULL)
{
fOk=FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS
|FORMAT_MESSAGE_ALLOCATE_BUFFER,
hDll,ERRORNO,systemLocal,
(PTSTR)&hlocal,0,NULL);
FreeLibrary(hDll);
}
}
if (hlocal!=NULL)
{
AfxMessageBox((PCTSTR)LocalLock(hlocal));
LocalFree(hlocal);
}
else
{
AfxMessageBox(_T("未知错误类型!"));
}
}
上面函数传递一个DWORD类型的错误代码给seeError函数,通过调用该函数来将错误代码ERRORNO转换成WinError.h中的消息文本,并通过当前机器的本地语言(英语、汉语等)输出。
对以上代码解释如下:
1.HLOCAL数据类型
Handle to a local memory block.
This type is declared in WinDef.h as follows:
2.核心函数FormatMessage