Windows核心编程(一)错误处理

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

---VOID:这个函数不可能失败。极少数的Windows函数返回值为VOID。

---BOOL:函数失败返回值为0,否则返回一个非0值。应避免测试返回值是否为TRUE。应该检查它是否不为FALSE。

---HANDLE:函数失败返回值为NULL,否则,HANDLE将标识一个可以操纵的对象。某些函数会返回INVALID_HANDLE_VALUE的一个句柄值,它被定义为-1。

---PVOID:函数调用失败返回值为NULL,否则,PVOID将标识一个数据块的内存地址。

---LONG/DWORD:返回计数的函数通常会返回一个LONG或DWORD。如果函数出于某种原因不能对我们想要计数的东西进行计数,它通常会返回0或-1。

2、在内部,当Windows函数检测到错错误时,它会使用一种名为“线程本地存储区”的机制将相应的错误代码与“主调线程”关联到一起。这种机制使不同的线程能够独立运行,互不干扰对方的错误代码。函数返回时,其返回值会指出已发生一个错误。

3、DWORD GetLastError( );

此函数返回由上一个函数调用设置的线程的32位错误代码。

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

4、在Visual Studio的Watch窗口中使用$err,hr来查看当前线程的“上一个错误代码”。

利用Error Lookup工具可以将错误代码转换为相应的文本描述。

5、DWORD FormatMessage( 

        DWORD dwFlags,

        LPCVOID  pSource,

        DWORD  dwMessageId,

        DWORD  dwLanguageId,

        PTSTR   pszBuffer,

        DWORD  nSize,

        va_list   *Arguments);

此函数可以将错误代码转换为相应的文本描述。可以返回传入的错误代码对应的字符串的首地址。

6、VOID SetLastError( DWORD dwErrCode);

此函数允许我们将线程局部存储区的错误代码设置为我们传递的值,之后调用GetLastError( )返回的就是我们刚刚设置的值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值