Windows核心编程-读书笔记1-3

第1章  对程序错误的处理调用Windows函数时,首先检验传递参数的有效性,如无效,或无法执行,系统返回一个值,指明该函数运行失败。Windows函数常用的返回值类型:VOID           该函数的运行不可能失败。BOOL           失败返回0,否则非0。可测试HANDLE            失败返回NULL,否则返回HANDLE。标识可操作对象注,
摘要由CSDN通过智能技术生成
第1章  对程序错误的处理
   
   

调用Windows函数时,首先检验传递参数的有效性,如无效,或无法执行,系统返回一个值,指明该函数运行失败。

Windows函数常用的返回值类型:

VOID           该函数的运行不可能失败。

BOOL           失败返回0,否则非0。可测试

HANDLE            失败返回NULL,否则返回HANDLE。标识可操作对象

注,有些函数失败返回句柄值INVALID_HANDLE_VALUE,值为-1。具体见Platform SDK 文档

PVOID          失败,返回NULL,否则PVOID,标识数据块内存地址

LONG/DWORD    根据返回值阅读Platform SDK文档,以确保正确检查潜在的错误

Microsoft编译了一个所有可能的错误代码列表,每个代码都有一个32位的号码.

Windows函数检测到错误时,会使用线程本地存储器(thread-local storage)将相应的错误代码号码与调用的线程关联起来(线程本地存储器见21章)。这使线程能互相独立运行,不会影响各自的错误代码。函数返回值将指明错误已经发生,如要确定错误,需调用GetLastError函数:返回值为一个32位错误代码。

WinError.h文件中包含了错误代码列表。每个错误由3部分组成:消息ID消息文本一个号码

1.  Microsoft选择使用最后错误代码机制(成功时也改写最后的错误代码)来返回函数成功原因信息。运行成功时,可通过调用 GetLadtError函数来确定其他的一些信息。

调试时,可在 Watch窗口中键入“@err,hr”,就能监控线程的最后错误代码。

1-1键入“@err,hr”Watch窗口观看最后错误代码

2.  Visual studio还配有Error Lookup程序,可将错误代码号换成相应文本描述。

3.  可用Format-Message()函数将错误代码转换成它的文本描述。

DWORD dwError = GetDlgItemInt(hwnd, IDC_ERRORCODE, NULL, FALSE); //nr

HLCAL hlocal = NULL; //Buffer that gets the error message string

BOOL f0k= FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM |    //标志

                         FORMAT_MESSAGE_ALLOCATE_BUFFER, //分配内存

                         NULL, dwError,  //错误代码号

                         MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),

                         (LPTSTR) &hlocal, 0, NULL);   //内存句柄

此函数为多语言的,这里选择英语描述。

定义自己的错误代码:

设定线程最后的错误代码,让函数返回FALSE、INVALID_HANDLE_VA LUE、NULL等合适信息即可。

1.      使用 WinError.h中已经存在的代码:

VOID SetLastError(DWORD dwErrCode);

2.      创建自己的代码:错误代码域的第29位(客户定义代码位)必须为1

2章 Unicode

单字节字符集

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值