Windows处理错误靠的是API的返回值,类型不止一种种:函数
- VOID,函数不可能失败,Windows API的返回值不多是这个状况。
- BOOL,若是函数失败,则返回值是0,不然返回是非零值。不要测试返回值是否为TRUE!
- HANDLE,若是函数失败,则返回值一般是NULL,不然返回一个HANDLE用于操做对象。有的函数是返回INVALID_HANDLE_VALUE的,它被定义为-1,以函数在文档中的说明为标准!
- PVOID,若是函数失败,则返回NULL,不然返回内存块的地址。
- LONG/DWORD,比较麻烦。某些状况下,函数没法对想要计数的对象计数,则返回值一般是0或者-1。为了处理潜在的错误,必须认真阅读SDK文档中的说明。
当Windows函数检测到一个错误的时候,会使用线程本地存储的机制,关联错误代码和调用函数的线程。这样就能够保证线程不会影响各自的错误代码。工具
而肯定这个错误的方法就是调用GetLastError函数,它只返回一个DWORD类型的错误代码。测试
当你拥有这个错误代码后,必须将号码转化成更有用的对象,这里能够根据头文件WinError.h中定义的错误代码列表来处理。spa
示例程序能够参照VS的一个小工具Error Lookup。线程