- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
对程序错误的处理.doc
第1章 对程序错误的处理
在开始介绍Microsoft windows的特性之前。先了解windows的各个函数是如何进行错误处理的;
当调用一个W1ndows函数时,它首先要检验传递给它的各个参数的有效性。再设法执行任务。如果传递了一个无效参数,或者由于某种原因无法执行这项操作,那么操作系统就会返回一个值.指明该函数在某种程度上运行失败了。表1—1列出了大多数windows的函数使用的返回值的数据类型。
数据类型 表示失败的值
VOID 该函数的运行不可能失败。windows函数的返回值类型很少是VOID
BOOL 如果函数运行失败,那么返回值是0,否则返回的是非0值。
HANDLE 如果函数运行失败,则返回值是NULL,否则返回值为HANDLE,用于标识你可以操作的一个对象。注意,有些函数会返回一个句柄值INVALID_HANDLE_VALUE,它被定义为-1.
PVOID 如果函数运行失败,则返回值是NULL,否则返回值为PVOID,以标识数据块的内存地址。
LONG/DWORD 这是个难以处理的值。返回数量的函数通常返回LONG或DWORD,如果由于某种原因,函数无法对想要进行计数的对象进行计数,那么该函数通常返回0或-1,如果调用的函数返回了LONG/DWORD,那么请认真阅读SDK文档,以确保能正确检查潜在的错误。
一个WIndows函数返回的错误代码对了解该函数为什么会运行失败常常很有用。微软公司编译了一个所有可能的错误代码的列表.并且为每个错误代码分配了一个32位的号码。
从系统内部来讲,当一个windows函数检测到一个错误时.它会使用一个称为线程本地存储器的机制,
将相应的错误代码号码与调用的线程关联起来。这将使线程能够互相独立地运行.而不会影响各自的错误
代码。当函数返回时.它的返回值就能指明—个错误已经发生。若要确定这是个什么错误。请调用GetLastError函数;
GetLastError能返回线程产生的最后一个错误。如果该线程调用的windows函数运行成功,那么最后一个错误代码就不会被改写,并且不指明运行成功。有少数windows函数并不遵循这一规则,它会更改最后的错误代码;但是platform SDK文档通常指明,当函数运行成功时,该函数会更改最后的错误代码。
Windows 98 许多Windows 98的函数实际上是用Microsoft公司的16位Windows 3.1产品产生的1 6位代码来实现的。这种比较老的代码并不通过GetLastError之类的函数来报告错误,而且Microsoft公司并没有在Windows 98中修改1 6位代码,以支持这种错误处理方式。对于我们来说,这意味着Windows 98中的许多Wi n 3 2函数在运行失败时不能设置最后的错误代码。该函数将返回一个值,指明运行失败,这样你就能够发现该函数确实已经运行失败,但是你无法确定运行失败的原因。
在进行调试的时候,监控线程的最后错误代码是非常有用的。在VC6.0中微软的调试程序支持一个非常有用的特性,即可以配置Watch窗口,以便始终都能显示线程的最后错误代码的号码和该错误的英文描述。通过选定watch窗口中的一行,并键入@err,hr,就能够做到这一点。另外,Visual studio还配有一个小的实用程序,称为Error Lookup.可以用它来将错误代码的号码转换成相应文本描述。
最后要说的是你也可以自己定义自己的错误代码。若要指明函数运行失败,只需要设定线程的最后错误代码,然后让你的函数返回FALSE、INVALID_HANDLE_VALUE、NULL或者返回任何合适的信息。若要设定线程的最后错误代码,只需要调用WinError.h中已经存在的代码。
第2章 Unicode
Unicode是开发任何应用程序时要采用的基本步骤。所以放在前面来讲这个问题。
有些文字和书写规则(比如日文中的汉字就是个典型的例子)的字符集中的符号太多了,因此单字节(它提供的符号最多不能超过2 5 6个)是根本不敷使用的。为此出现了双字节字符集(D B C S),以支持这些文字和书写规则。但是对双字节字符集的操作必须通过windows提供的三个函数CharNext 和Char Prev 、IsDBCSLeadByte来完成。还是有点复杂。为了更使操作更容易,从而产生了Unicode(宽字节字符集)。
U n i c o d e是A p p
文档评论(0)