1. 主要了解Window错误代码结构,这样就可以构造自己的错误处理
调用 VOID SetLastError(DWORD);
如何不是写供其他人调用的库, 感觉没有必要定义自己的错误代码, 当是理解WIN处理原理吧.
2. 显示系统已存在代码主要是理解
DWORD WINAPI FormatMessage( __in DWORD dwFlags, __in LPCVOID lpSource, __in DWORD dwMessageId, __in DWORD dwLanguageId, __out LPTSTR lpBuffer, __in DWORD nSize, __in va_list* Arguments );这个函数, 而显示相应的代码文本已经有比较固定的代码,可以直接使用:
void PrintWin32Error()
{
LPTSTR lpMsgBuf;
HMODULE hModule = NULL;
DWORD dwFlag = FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS;
hModule = LoadLibraryEx(TEXT("NetMsg.dll"), NULL, DONT_RESOLVE_DLL_REFERENCES);
if (hModule)
{
dwFlag |= FORMAT_MESSAGE_FROM_HMODULE;
}
DWORD dwError = FormatMessage(
dwFlag,
hModule,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
(LPTSTR) &lpMsgBuf,
0,
NULL
);
if (dwError)
{
TRACE(TEXT("Error Id:%08X Text:%s"), GetLastError(), lpMsgBuf);
// Free the buffer.
LocalFree( lpMsgBuf );
}
}
需要注意的是要在WIN API调用后马上调用此函数, 防止其它API调用重置子错误代码.