Windows核心编程第一章笔记

常见的Windows函数值返回类型

数据类型指出函数调用失败的值
VOID这个函数不可能失败。只有极少数Winodows函数的返回值类型为VOID
BOOL如果函数失败,返回值为0;否则,返回值是一个非0值。应避免测试返回值是否为TRUE:最稳妥的做法是检查它是否不为0
HANDLE如果函数失败,则返回值通常为NULL;否则,HANDLE将标识一个可以操纵的对象。请注意这种返回值,因为某些函数会返回为INVALID_HANDLE_VALUE的一个句柄值,它被定义为-1。函数的Platform SDK文档清楚地说明了函数是返回NULL还是INVALID_HANDLE_VALUE来标识失败
PVOID如果函数调用失败,则返回值为NULL;否则,PVOID将标识一个数据块的内存地址
LONG/DWORD这种类型比较棘手。返回计数的函数通常会返回一个LONG或DWORD。如果函数出于某种原因不能对我们想要计数的东西进行计数,它通常会返回0或-1(具体取决于函数)。如果要调用一个返回LONG/DWORD的函数,务必仔细阅读Plantform SDK文档,确保我们会正确地检查可能出现的错误



通常情况下,如果Windows函数能返回错误代码,将有助于我们理解函数调用为什么会失败。Microsoft编辑了一个列表,其中列出了所有可能的错误代码,并为每个错误代码都分配了一个32位的编号。在内部,当Windows函数检测到错误时,它会使用一种名为“线程本地存储区”(thread-local storage)的机制将相应错误代码与“主调线程”(或者说发出调用的线程,即calling thread)关联到一起。这种机制使不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况。函数返回时,其返回值会指出已发生的一个错误。要查看具体是什么错误,请调用GetLastError函数,如下图所示:

DWORD GetLastError();

此函数的作用很简单,就是返回由上一个函数调用设置的线程的32位错误代码。


每个错误都有三中表示:一个消息ID(一个可在源代码中使用的宏,用于与GetLastError的返回值进行比较)、消息文本(描述错误的英文文本)和一个编号(应该避免使用此编号,尽量使用消息ID)。


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值