Chinaunix首页 | 论坛 | 博客
  • 博客访问: 151694
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 401
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-31 22:55
文章分类

全部博文(43)

文章存档

2015年(1)

2014年(25)

2013年(17)

我的朋友

分类: Windows平台

2014-01-03 20:42:50

一:常见的Windows函数返回值数据类型

  VOID:运行基本不会出错。但是windows的返回值很少是void

  BOOL:如果函数运行失败,那么返回值为0,在对该函数进行调用是否正确的测试时候,不要判断结果是否为0,不要判断结果是不是Ture

  HANDLE:如果HANDLE的函数运行失败,返回值为NULL,否则返回值为你要调用窗体的HANDLE

           有时候返回值为INVALID_HANDLE_VALUE,INVALID定义为-1

  PVOID:失败时返回值为NULL,            否则为标识数据块的内存地址。

  LONG/DWORD:一般出现错误时返回的数值为LONGDWORD。函数无法对参数进行计数的时候返回0-1(根据函数而定)。

 

二:错误检查

     当windows函数检测到一个错误的时候,它会使用线程本地存储器将相应的错误代码和调用的线程关联起来。这样就能使线程互相不影响各自的错误代码。使用这些错误代码,只需调用GetLastError函数:DWORD GetLastError();这个函数将返回一个32位的错误代码。获得32位错误代码后查询WinError.h头文件(WinError.h头文件包含了microsoft公司定义的所有错误代码)

      每个错误都有三种表示:一个消息ID、消息文本、一个编号。

注意  1、Windows函数失败后,应该马上调用GetLastError,因为假如又调用了另一个Windows函数,则此值很可能被改写。

          2、Windows函数调用成功可能缘于不同原因。比如创建一个具名事件内核对象时,以下两种情况均会成功:①创建成功②存在同名的事

               件内核对象。此时可以调用GetLastError函数,对于后一种情况将返回ERROR_ALREADY_EXISTS

 

三:错误显示

    在编写应用程序的时候发现一个错误,作为程序员,要尽可能的向用户显示该错误的信息使用FormatMessage函数,函数原型如下:

       DWORD FormatMessage(

        DWORD dwFlags, //来源和处理选择

        LPCVOID lpsource, //对消息来源的指针

        DWORD dwMessageId, //请求的消息识别符

        DWORD dwLanguaueId, //请求的消息的语言标识符

        LPTSTR lpBuffer,    //对信息缓冲器指针

        DWORD nSize, //消息缓冲区的最大数值

        va_list *Arguments //指向一组消息的指针

        )

 

四:自定义错误代码

    在自己编写被别人调用的程序时,只需要设定线程的最后错误代码,让你的函数返回合适的错误数据类型。设定线程最后错误代码函数:VOID SetLastError(DWORD dwErrCode)可以将任何合适的32位号码传给该函数。只要该号码能够在winerror.h中正确的表达错误即可~也可以自己设置错误代码。

        32位代码的域:

 

          31~~30             29                                 28                27~26                                              15~0

内容      严重性              Microsoft/客户               保留             设备代码                                         异常代码

含义      0=成功             0=Microsoft定义代码      必须是0       前256个值由Microsoft保留              Microsoft/客户定义的代码

             1=信息(提示)   1=客户定义代码                                                                                                  

             2=警告

             3=错误

 

注:typedef HANDLE HLOCAL; HLOCAL 只是HANDLE的别名而已。

阅读(1209) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~