• 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头文件包含了微软定义的错误码列表。

  • 相关阅读:
    深入理解递归函数的调用过程
    关于字符串和字符数组的再讨论
    返回字符串的长度
    再写静态变量的有效范围
    一道关于返回指针和返回数组名的面试题
    关于TCP/IP的三次握手和四次挥手解释
    C++面向对象的编程(二)
    关于面试宝典中的检测并修改不适合的继承
    argc和argv
    基于C的文件操作(转)
  • 原文地址:https://www.cnblogs.com/faceang/p/1728431.html
Copyright © 2020-2023  润新知