《Windows via C/C++》学习笔记(一):Error handling
1. 介绍了Windows函数的几种返回值:
类型 | 说明 |
VOID | 函数不能失败 |
BOOL | 函数失败时返回0;成功时返回非0。可测试是否为FALSE |
HANDLE | 函数失败时通常返回NULL(即0),亦有可能为INVALID_HANDLE_VALUE(即-1);成功则为相应的句柄 |
PVOID | 函数失败时通常返回NULL(即0);成功则为数据块所在的内存地址 |
LONG/DWORD | 函数失败时通常返回0或-1,具体参见Platform SDK文档 |
2. 相关函数
DWORD GetLastError()
· 该函数通过线程局部存储(Thread-local storage)机制获得线程当前的错误代号。
· 必须在Windows函数失败后立即调用该函数,否则其错误代号有可能被另一个函数调用结果所覆盖,Windows函数成功时调用GetLastError将返回ERROR_SUCCESS。
· 即使某个Windows函数运行成功,亦可通过GetLastError获得一些额外的信息。
· Visual studio可以在监视器上设置“$err,hr”监视GetLastError的返回值。
DWORD FormatMessage(
DWORD dwFlags,
LPCVOID pSource,
DWORD dwMessageId,
DWORD dwLanguageId,
PTSTR pszBuffer,
DWORD nSize,
Va_list *Arguments
);
· 该函数将错误代号转换为相应的文字表述。
· 支持多语言(dwLanguage)。
· 支持DLL导入(pSource)。
3. 自定义错误号
错误代号为一32位整形数,其第29位若为0则为微软定义的错误代号;为1则为雍和自定义,具体详见第二十四章。