windows函数是如何进行错误处理的。调用windows函数时,它会先验证我们传给它的参数,然后开始执行任务。如何传入的参数无效,或者由于其它原因导致操作无法执行,则函数的返回值将指出函数因为某些原因失败了。
常见的windows函数返回值数据类型。
void 这个函数不会失败。
bool 失败返回0,成功返回非0。应该避免测试返回值是否为TRUE,最稳妥的做法是检查它是否 不为FALSE。
HANDLE 失败返回NULL,否则,HANDLE将标识一个可以操纵的对象。注意这种返回值 ,因为某些函数会返回为INVALID_HANDLE_VALUE的一个句柄值 ,它被定义为-1。
函数的platform sdk 文档清楚说明了函数返回是NULL 还是INVALID_HANDLE_VALUE来标识失败。
PVOID 失败返回NULL 。成功,PVOID将标识一个数据块的内在地址。
LONG /DWORD 比较复杂 查MSDN
通常情况 下,如果windows函数能返回错误代码,将有助于我们理解函数为什么调用失败。错误 代码列表,列出了所有有可能的错误代码,为其分配了32位编号。
线程本地存储区(thread-local storage)与主调线程或者说是发出调用的线程 calling thread.关联在一起。
::GetLastError DWORD GetLastError(void) 返回由上一个函数调用设置的线程的32位错误代码。 在WinError.h 文件中,有定义。ERROR_SUCCESS 查声明可以找到此文件。或找MSDN 。 或visual studio 自带的Error LookUp 工具。 工具---外部工具---errlook 工具 \vs2008\Common7\Tools\errlook.exe 添加进去即可。
在调试程序时,对上一个错误代码进行监视是相当有用的。 $err,hr ,hr 是个限定符。
定义自己的错误代码 void SetLastError(DWORD dwErrorCode) 传递合适的32位值。
window 提供了一个函数,可将错误码转化为相应的文本描述。 FormatMessage MSDN上有例子。
用C++编程会遇到的一些
基本类型的错误:
● 编译错误。这类错误发生在代码编译阶段,后果是无法生成目标文件。这种错误可
能是语法错误,意思是编译器无法理解某些代码。语法错误经常是由像输入错误这
样的简单错误导致的。编译器还能发出警告。尽管通常情况下不必在意警告,但还
是应该将它们当做错误来对待,进行修复并重新编译。
● 链接错误。这类错误发生在链接过程中,并可能提示无法找到程序的某些外部引用。
解决办法通常是调整程序中出现问题的引用关系,然后重新编译/链接。
● 运行时错误。这类错误发生在可执行文件的运行过程中。如果程序执行了某些非法
操作,那么有可能突然崩溃。但是有一种更难以捉摸的运行时错误(逻辑错误)能让
程序以出人意料的方式运行。如果您曾经玩过某个游戏,里面的某个角色能在空中
行走(而这个角色不应该有能力在空中行走),那么所看到的就是一个逻辑错误。