Windows核心编程——笔记:第一章 错误处理

本文详细阐述了Windows系统中错误处理的原理,包括线程本地存储区的作用、错误代码的表示方式、如何获取和解释错误信息,以及如何设置自定义错误码。此外,文章还介绍了错误代码的组成部分及其含义,帮助开发者更有效地诊断和解决程序运行中的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在内部,当windows函数检查到错误时,他或使用一种名为“线程本地存储区”(thread-localstorage)的机制,讲相应的错误代码与“主掉线程”关联到一起。这种机制使不同线程能独立工作,不会互相干扰对方的错误代码情况。 查看具体是什么错误可以调用DWORD GetlastError();

每个错误都有三种表示方式:

一个消息ID,消息文本,一个编号。

 Windows函数调用失败之后要马上调用GetLastError,因为又调用了另一个Windows函数,则此值很可能被改写。注意,成功调用windows函数可能用ERROR_SUCCESS改写此值。 Windows函数调用成功也有可能是不同的原因,例如创建一个具名事件内核对象时,有两种成功方式:1、对象实际完成创建;2、存在一个同名的事件内核对象(ERROR_ALREADY_EXISTS)。应用程序需要知道成功原因,为返回这种信息,Microsoft选择采用上一个错误代码机制。所以,特定函数调用成功是,可以调用GetLastError来确定额外的信息。

调试时候,MS Visual Studio中的watch(监视)窗口,支持$err,hr 来查看线程的上一个错误代码和错误的文本描述, “,hr”限定符显示错误描述。 Windows提供了一个函数,转化GetLastError返回的整数为错误描述, DWORD FormatMessage

{

     DWORD dwFlags,

     LPCVOID pSource,

     DWORD dwMessageId,

     DWORD dwLanguageId,

    PTSTR pszBuffer,

    DWORD nSize,

    va_list *Arguments

}

Windows提供了一个函数,允许我们自己设定错误码

VOID SetLastError(DWORD dwErrCode);

错误代码的不同字段

位          31~30                        29                            28                     27~16                        15~0

内容       严重性                       微软/用户               保留                  Facility代码                异常代码

含义       0=成功                      0=微软定义            必须为0           前256微软保留          MS和客户定义的代码

              1=信息(提示)            1=用户定义

              2=警告

              3=错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值