Windows核心编程(第5版)ch01

Windows核心编程(第5版)ch01

ID:41032578

大小:2.08 MB

页数:7页

时间:2019-08-14

Windows核心编程(第5版)ch01_第1页
Windows核心编程(第5版)ch01_第2页
Windows核心编程(第5版)ch01_第3页
Windows核心编程(第5版)ch01_第4页
Windows核心编程(第5版)ch01_第5页
资源描述:

《Windows核心编程(第5版)ch01》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第1章错误处理第1章错误处理本章内容1.1定义自己的错误代码1.2ErrorShow示例程序在深入讨论MicrosoftWindows提供的诸多特性之前,应该先理解各个Windows函数是如何进行错误处理的。调用Windows函数时,它会先验证我们传给它的参数,然后再开始执行任务。如果传入的参数无效,或者由于其他原因导致操作无法执行,则函数的返回值将指出函数因为某些原因失败了。表1-1展示了大多数Windows函数使用的返回值的数据类型。表1-1常见的Windows函数返回值数据类型数据类型指出函数调用失败的值VOID这个函数不可能失败。只有极少数Windows函数的返回值类型为VOIDBO

2、OL如果函数失败,返回值为0;否则,返回值是一个非0值。应避免测试返回值是否为TRUE;最稳妥的做法是检查它是否不为FALSEHANDLE如果函数失败,则返回值通常为NULL;否则,HANDLE将标识一个可以操纵的对象。请注意这种返回值,因为某些函数会返回为INVALID_HANDLE_VALUE的一个句柄值,它被定义为–1。函数的PlatformSDK文档清楚说明了函数是返回NULL还是INVALID_HANDLE_VALUE来标识失败PVOID如果函数调用失败,则返回值为NULL;否则,PVOID将标识一个数据块的内存地址LONG/DWORD这种类型比较棘手。返回计数的函数通常会返回一个

3、LONG或DWORD。如果函数出于某种原因不能对我们想要计数的东西进行计数,它通常会返回0或–1(具体取决于函数)。如果要调用一个返回LONG/DWORD的函数,务必仔细阅读PlatformSDK文档,确保我们会正确地检查可能出现的错误通常情况下,如果Windows函数能返回错误代码,将有助于我们理解函数调用为什么会失败。Microsoft编辑了一个列表,其中列出了所有可能的错误代码,并为每个错误代码都分配了一个32位的编号。在内部,当Windows函数检测到错误时,它会使用一种名为“线程本地存储区”(thread-local9第1章错误处理storage)的机制将相应的错误代码与“主调线程

4、”(或者说发出调用的线程,即callingthread)关联到一起(线程本地存储区的详情将在第21章讨论)。这种机制使不同的线程能独立运行,不会出现相互干扰对方的错误代码的情况。函数返回时,其返回值会指出已发生一个错误。要查看具体是什么错误,请调用GetLastError函数,如下所示:DWORDGetLastError();此函数的作用很简单,就是返回由上一个函数调用设置的线程的32位错误代码。有了32位错误代码之后,接着需要把它转换为更有用的信息。WinError.h头文件包含了Microsoft定义的错误代码列表。为便于体验,下面摘录了其中的一部分://MessageId:ERROR_

5、SUCCESS////MessageText:////Theoperationcompletedsuccessfully.//#defineERROR_SUCCESS0L#defineNO_ERROR0L//dderror#defineSEC_E_OK((HRESULT)0x00000000L)////MessageId:ERROR_INVALID_FUNCTION////MessageText:////Incorrectfunction.//#defineERROR_INVALID_FUNCTION1L//dderror////MessageId:ERROR_FILE_NOT_FOUND/

6、///MessageText:////Thesystemcannotfindthefilespecified.//#defineERROR_FILE_NOT_FOUND2L////MessageId:ERROR_PATH_NOT_FOUND////MessageText:////Thesystemcannotfindthepathspecified.//#defineERROR_PATH_NOT_FOUND3L////MessageId:ERROR_TOO_MANY_OPEN_FILES////MessageText:////Thesystemcannotopenthefile.//#def

7、ineERROR_TOO_MANY_OPEN_FILES4L////MessageId:ERROR_ACCESS_DENIED////MessageText:9第1章错误处理////Accessisdenied.//#defineERROR_ACCESS_DENIED5L可以看出,每个错误都有三种表示:一个消息ID(一个可在源代码中使用的宏,用于与GetLastError的返回值进行比较)、消息文本(描述错误

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。