Windows 函数错误处理

在涉入并检验微软Windows所能提供的许多特性之前,需要先理解各种Windows函数在错误处理方面的功能。

在调用Windows函数时,函数对传递给的参数进行有效性检验,然后再尝试完成他的工作。如果传递了一个无效参

数或者其他一些原因导致无法执行功能,函数的返回值指明了函数失败的原因。表1-1列出了多数Windows函数使

用的返回值数据类型。

表1-1.Windows函数常用返回类型
数据类型    指明失败类型的值
VOID        该函数不太可能失败,很少数Windows函数返回值类型为VOID
BOOL        如果函数失败,返回值为0;反之,返回值为非0。最好测试返回值是0或者非0,避免测试返回    

        值是否为TRUE。
HANDLE    如果函数失败,返回值通常为NULL,反之,HANDLE标识一个你可以操作的对象。使用它要小心    

        ,因为一些函数返回句柄值INVALID_HANDLE_VALUE,该值定义为-1。针对各函数的平台SDK文档        

      会清楚的描述函数返回NULL或者INVALID_HANDLE_VALUE来表明失败。
PVOID        如果函数失败,返回值为NULL,反之,PVOID标识某数据块的内存地址。
LONG/DWORD    这是个棘手的问题,函数返回个数通常返回一个LONG或者DWORD值。如果某种情况下函数数不过    

           来你要数的事情,函数通常返回0或者-1(依函数不同而异)。如果要调用一个返回LONG/DWORD        

           值的函数,请详细阅读平台SDK文档来确保正确的检核潜在的错误。

当一个Windows函数返回时附带错误码,明白为什么函数失败通常非常有用。微软业已编译了一系列可能的错误码

并给每个错误码指定了一个32位的数值。

在内部,当一个Windows函数检测到一个错误时,他使用一个称作本地线程存储的机制来关联对应的错误码数值和

调用的线程(本地线程存储在第21章讨论)。他使得各线程各自独立运行而不影响各自的错误码。当函数返回给

你时,他的返回值将表明发生了一个错误。要明确的看到他是哪一个错误,调用以下GetLastError函数:

DWORD GetLastError();

该函数简单地返回线程的32位错误码。

既然有了32位错误码的值,就可以转换该值为更有用的信息。WinError.h头文件包含了微软定义的错误码列表。

原文地址:https://www.cnblogs.com/faceang/p/1728431.html