• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2021-04-27 13:11 Aet 隐藏边栏 |   抢沙发  7 
文章评分 3 次,平均分 5.0

错误处理

调用windows函数时,它会先验证我们传给它的参数,然后再开始执行任务。如果传入的参数无效,或者由于其他原因导致操作无法执行,则函数的返回值将指出函数因为某些原因失败了。

在内部,windows函数检测到错误了,它会使用一种名为"线程本地存储区"的机制将相应的错误代码主调线程关联到一起。这种机制使不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况。

当函数返回时,其返回值会指出已发生一个错误。要查看具体的信息,得调用GetLastError函数。windows函数失败之后,应该马上调用GetLastError,因为如果又调用了一个别的windows函数,则可能GetLastError对应的信息也是被改成别的内容了。函数调用成功时,值被改成ERROR_SUCCESS了。

可以在VS里面监视GetLastError的相关信息,通过输入 $err,hr实现。

FormatMessage

可以向用户显示错误的文本描述。

定义自己的错误代码

为了指出错误,只需设置线程的上一个错误代码,然后令自己的函数返回FALSE,INVALID_HANDLE_VALUE,NULL或其他合适的值。调用下面的函数:

错误代码的字段:

31-30 29 28 27-16 15-0
内容 严重性 Microsoft/客户 保留 Facility代码 异常代码
含义 0,成功 0,Microsoft 0 前256个值 Microsoft/客户
含义 1,提示 1,客户 0 由Microsoft 定义的代码
含义 2,警告 0 保留
含义 3,错误 0

字符和字符串处理

安全函数

所有安全函数的首要任务是验证传给它们的参数值。要坚持的内容包括:

  • 指针不为NULL
  • 整数在有效范围内
  • 枚举值是有效的
  • 缓冲区足够容纳结果数据

任何一项检查失败,函数都会设置局部于线程的C运行时变量errno。并返回一个errno_t值来指出成功或失败。

Windows字符串函数

MultiByteToWideChar

  • 将多字节字符串转换为宽字节字符串

  1. 标识了与多字节字符串关联的一个代码页值
  2. 允许我们进行额外的控制(影响带变音符号的字符)
  3. 指定要转换的字符串
  4. 指定字符串的长度。如果这个值是-1,函数返回源字符串的长度
  5. 待写入缓冲区的内存地址
  6. 缓冲区的最大长度

WideCharToMultiByte

  • 将宽字符串转化为多字节字符串

  1. 标识了与新转换的字符串关联的一个代码页值
  2. 允许我们进行额外的控制(影响带变音符号的字符)
  3. 待转换字符串的内存地址
  4. 指定字符串的长度。如果这个值是-1,函数返回源字符串的长度
  5. 指定的缓冲区
  6. 缓冲区的最大大小
  7. 在遇到一个不能转换的宽字符时,函数使用pDefaultChar指向的参数
  8. 如果至少有一个不能转换为对应的多字节形式,函数会把这个变量设为TRUE。如果所有字符都成功转换,会把这个变量设为FALSE。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2021-11-20
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享