windows核心编程(第5版)中文版

windows核心编程(第5版)中文版

ID:15502359

大小:36.42 MB

页数:687页

时间:2018-08-03

windows核心编程(第5版)中文版_第1页
windows核心编程(第5版)中文版_第2页
windows核心编程(第5版)中文版_第3页
windows核心编程(第5版)中文版_第4页
windows核心编程(第5版)中文版_第5页
资源描述:

《windows核心编程(第5版)中文版》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、下载第一部分程序员必读第1章对程序错误的处理在开始介绍MicrosoftWindows的特性之前,必须首先了解Windows的各个函数是如何进行错误处理的。当调用一个Windows函数时,它首先要检验传递给它的的各个参数的有效性,然后再设法执行任务。如果传递了一个无效参数,或者由于某种原因无法执行这项操作,那么操作系统就会返回一个值,指明该函数在某种程度上运行失败了。表1-1列出了大多数Windows函数使用的返回值的数据类型。表1-1Windows函数常用的返回值类型数据类型表示失败的值VOID该函数的运行不可能失败。Windows函数的返回值类型很少是VOIDBOOL

2、如果函数运行失败,那么返回值是0,否则返回的是非0值。最好对返回值进行测试,以确定它是0还是非0。不要测试返回值是否为TRUEHANDLE如果函数运行失败,则返回值通常是NULL,否则返回值为HANDLE,用于标识你可以操作的一个对象。注意,有些函数会返回一个句柄值INVALID_HANDLE_VALUE,它被定义为-1。函数的PlatformSDK文档将会清楚地说明该函数运行失败时返回的是NULL还是INVALID_HANDLE_VALIDPVOID如果函数运行失败,则返回值是NULL,否则返回PVOID,以标识数据块的内存地址LONG/DWORD这是个难以处理的值。返

3、回数量的函数通常返回LONG或DWORD。如果由于某种原因,函数无法对想要进行计数的对象进行计数,那么该函数通常返回0或-1(根据函数而定)。如果调用的函数返回了LONG/DWORD,那么请认真阅读PlatformSDK文档,以确保能正确检查潜在的错误一个Windows函数返回的错误代码对了解该函数为什么会运行失败常常很有用。Microsoft公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个32位的号码。从系统内部来讲,当一个Windows函数检测到一个错误时,它会使用一个称为线程本地存储器(thread-localstorage)的机制,将相应的错误

4、代码号码与调用的线程关联起来(线程本地存储器将在第21章中介绍)。这将使线程能够互相独立地运行,而不会影响各自的错误代码。当函数返回时,它的返回值就能指明一个错误已经发生。若要确定这是个什么错误,请调用GetLastError函数:该函数只返回线程的32位错误代码。当你拥有32位错误代码的号码时,必须将该号码转换成更有用的某种对象。WinError.h头文件包含了Microsoft公司定义的错误代码的列表。下面显示了该列表的某些内容,使你能够看到它的大概样子:2计计第一部分程序员必读下载如你所见,每个错误都有3种表示法:一个消息ID(这是你可以在源代码中使用的一个宏,以便

5、与GetLastError的返回值进行比较),消息文本(对错误的英文描述)和一个号码(应该避第1章对程序错误的处理计计3下载免使用这个号码,可使用消息ID)。请记住,这里只显示了WinError.h头文件中的很少一部分内容,整个文件的长度超过21000行。当Windows函数运行失败时,应该立即调用GetLastError函数。如果调用另一个Windows函数,它的值很可能被改写。注意GetLastError能返回线程产生的最后一个错误。如果该线程调用的Windows函数运行成功,那么最后一个错误代码就不被改写,并且不指明运行成功。有少数Windows函数并不遵循这一规则

6、,它会更改最后的错误代码;但是PlatformSDK文档通常指明,当函数运行成功时,该函数会更改最后的错误代码。Windows98许多Windows98的函数实际上是用Microsoft公司的16位Windows3.1产品产生的16位代码来实现的。这种比较老的代码并不通过GetLastError之类的函数来报告错误,而且Microsoft公司并没有在Windows98中修改16位代码,以支持这种错误处理方式。对于我们来说,这意味着Windows98中的许多Win32函数在运行失败时不能设置最后的错误代码。该函数将返回一个值,指明运行失败,这样你就能够发现该函数确实已经运行

7、失败,但是你无法确定运行失败的原因。有些Windows函数之所以能够成功运行,其中有许多原因。例如,创建指明的事件内核对象之所以能够取得成功,是因为你实际上创建了该对象,或者因为已经存在带有相同名字的事件内核对象。你应搞清楚成功的原因。为了将该信息返回,Microsoft公司选择使用最后错误代码机制。这样,当某些函数运行成功时,就能够通过调用GetLadtError函数来确定其他的一些信息。对于具有这种行为特性的函数来说,PlatformSDK文档清楚地说明了GetLastError函数可以这样使用。请参见该文档,找出Crea

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

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

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