第一章
一、在Watch窗口中输入$err,hr来查看当前线程的“上一个错误”。
二、利用Error Lookup工具来将错误代码转换为相应的文本。
三、利用FormatMessage函数来将错误代码转换为相应的文本。
DWORD dwError=GetDlgItemInt(IDC_ERROR);
HLOCAL hlocal=NULL;
DWORD systemLocal=MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL);
BOOL fOK=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_ALLOCATE_BUFFER,
NULL,dwError,systemLocal,(PTSTR)&hlocal,0,NULL);
if(!fOK)
{
HMODULE hDll=LoadLibraryEx(TEXT("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
if(hDll!=NULL)
{
fOK=FormatMessage(FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_IGNORE_INSERTS|FORMAT_MESSAGE_ALLOCATE_BUFFER,
hDll,dwError,systemLocal,(PTSTR)&hlocal,0,NULL);
FreeLibrary(hDll);
}
}
if(fOK && (hlocal !=NULL))
{
SetDlgItemText(IDC_TEXT,(LPCTSTR)LocalLock(hlocal));
LocalFree(hlocal);
}
else
{
SetDlgItemText(IDC_TEXT,TEXT("NO Text found for this error number."));
}
//FORMAT_MESSAGE_FROM_SYSTEM : 表示希望获得一个系统定义的错误代码对应的字符串
//FORMAT_MESSAGE_IGNORE_INSERTS :表示允许获得含有%占位符的消息
//FORMAT_MESSAGE_ALLOCATE_BUFFER :要求函数分配一块足以容纳错误文本描述的内存