windows程序设计核心编程指南_第1页
windows程序设计核心编程指南_第2页
windows程序设计核心编程指南_第3页
windows程序设计核心编程指南_第4页
windows程序设计核心编程指南_第5页
已阅读5页,还剩6页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1 Windows的特性之前,必须首先了解Windows的各个函数是如何进当调用一个Windows函数时,它首先要检验传递给它的的各个参数的有效性,然后再设法执行任务。如果传递了一个无效参数,或者由于某种原因无法执行这项操作,那么操作系统就1-1列出了大多数Windows函数使用的返回值的数据类型。表1-1Windows数据类 该函数的运行不可能失败。Windows函数的返回值类型很少是 tformSDK文档将会清楚地说明该函数运行失败时返回的是 这是个难以处理的值。返回数量的函数通常返回LONG或DWORD。如果由于某种原因,函数无法对想要进行计数的对象进行计数,那么该函数通常返回0或-1(根据 tform公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个32位的号码。储器(thread-localstorage)的机制,将相应的错误代码号码与调用的线程关联起来(线程本地器将在第21章中介绍。这将使线程能够互相独立地运行,而不会影响各自的错误代码。当函数返回时,它的返回值就能指明一个错误已经发生。若要确定这是个什么错误,请调用GetLatError当你拥有2位错误代码的号码时,必须将该号码转换成更有用的某种对象。WiErro.h头文件包含了公司定义的错误代码的列表。下面显示了该列表的某些内容,使你能够看2第1章对程序错误的处 当Wndos函数运行失败时,应该立即调用taErrr函数。如果调用另一个Winos函 GetLastError能返回线程产生的最后一个错误。如果该线程调用的Windows函数 tformSDK文档Winows98许Windows98的函数实际上是用 公司的16位Windows3.1品产生的16位代码来实现的。这种比较老的代码并不通过GetLastError之类的函数来报告错误,而且 公司并没有在Windows98中修改16位代码,以支持这种错误处理方式。对于我们来说,这意味着Windows98中的许多in32函数在运行失败时不能设置最后的错误代码。该函数将返回一个值,指明运行失败,这样你就能够发现该函数确实已经运行失败,但是你无法确定运行失败的原因。有些indow函数之所以能够成功运行,其中有许多原因。例如,创建指明的内核对象之所以能够取得成功,是因为你实际上创建了该对象,或者因为已经存在带有相同名字的事件内对。你搞楚功的因为将该息回,公司选择使用最后错误代码机制。这样,当某些函数运行成功时,就能够通过调用GetLadtError函数来确定其他的一些tformSDK文档清楚地说明了GetLastError函数可以这样使用。请参见该文档,找出CreateEvent进行调试的时候,线程的最后错误代码是非常有用的。在Visualstudio6.0中,的调试程序支持一个非常有用的特性,即可以配置Watch窗口,以便始终都能显示线程的最后错误代码的号码和该错误的英文描述。通过选定 Watch窗口中的一行,并键入“@err,hr,就能做到一点观察图-1,会看已经调了Ceael函数该函返回ILI_L_L(-1的L,它未能开指的文。但是Wtc窗口向我们示最错误码(如果用GetLastError函数该函返回错误码)是0x 。该Wth窗又进步指错误码2是“系统能找指定文件”你发现它与WiErro.h文件的错代码所指字符相同的。图1-1在VisualStudio6.0的Watch窗口中键入4Visualstudio还配有一个小的实用程序,称为ErrorLookup。可以使用ErrorLookup将错误代码的号码转换成相应文本描述(见图1-2。如果在编写的应用程序中发现一个错误可能想要向用户显示该错误的文本描述。Windows提供了一个函数,可以将错误代码转换成它的文本描述。该函数称为Format-Message

图1-2ErrorLookupFormatMessage函数的功能实际上是非常丰富的,在创建向用户显示的字符串信息时,它是首选函数。该函数之所以有这样大的作用,原因之一是它很容易用多种语言进行操作。该函数能够检测出用户首选语言(在RegionalettingsControlanel小应用程序中设定并返回相应的文本。当然,首必须自己转换字串,然后已转换的消息表资源嵌你的.exe文件或DLL模块中然后函数选正确嵌入象。ErrorShow示例应用程序(本章后面将加以介绍)展示了如何调用该函数,以便将公司定义的错误代码转换成它的文本描述。, 公司是否建立了一个主控列表,以显示每个indows数可能 indows函数,但是该函数能够在内部调用另一个函数,而这另一个函数又可以调用另一个函数,如此类推。由于各种不同的原因,这些函数中的任何一个函数都可能运行失败。有时,当一个函数运行失败时,较高级的函数对进,然行行。建列,司必须每个函数的运行路径,并建立所有可能的错误代码的列表。这项工作很。而且,当创建系indow函数是如何向函数的调用者指明发生的错误,你也能够将该机制用于自己的函数。比如说,你编写了一个希望其他人调用的函数,你的函数可能因为这样或那样的原因而运行失败,你必须向函数的调用者说明它已经运行失败。ALSEINVALID_HANDLE_VALUE、NULL或者返回任何合适的信息。若要设定线程的最后错误代码,只需调用下面的代码:32WinError.h第第1章对程序错误的处 只要该代码能够正确地指明想要报告的错误即可。如果你认为WinError.h中的任何代码都不能正确地反映该错误的性质,那么可以创建你自己的代码。错误代码是个32位的数字,划分成表1-2所示的各个域。表1-2位必须是由 这些域将在第24章中详细讲述。现在,需要知道的重要域是第29位 公司规定他们建立的所有错误代码的这个信息位均使用0。如果创建自己的错误代码,必须使29位为1。 ErrorShow应用程序“01ErrorShow.exe”(在1-1中列出)展示了如何获取错误代码的文本描述的方法。该应用程序的源代码和资源文件位于本书所附光盘上的01-ErrorShow 一般来说,该应用程序用于显示调试程序的Watch窗口和ErrorLookup程序是如何运行的。当启动该程序时,就会出现可以将任何错误代码键入该编辑控件。当单击Lookup 图1-3ErrorShow窗第一个代码行用于从编辑控件中检索错误代码的号码。然后,建立一个内存块的句柄并将它初始化为NULL。FormatMesage函数在内部对内存块进行分配,并将它的句柄返回给我们。6当调用FormatMessage函数时,传递了FORMAT_MESSAGE_FROM_SYSTEM标志。该标志告诉FormatMessage函数,我们想要系统定义的错误代码的字符串。还传递了FORMAT_MESSAGE_ALLOCTE_BUFFER标志,告诉该函数为错误代码的文本描述分配足够大的内存块。该内存块的句柄将在hlocal变量中返回。第三个参数指明想要查找的错误代码的号码,第四个参数指明想要文本描述使用什么语言。如果FormatMessage函数运行成功,那么错误代码的本描述就位于内存块中,将它拷贝到框底部的滚动窗中。如果FormatMesage函运行失败,设法查看NetMsg.dll模块的消息代码,以了解该错误是否与网络有关。使用 NetMsg.dll模块的句柄,再次调用FormatMessage函数。你会看到,每个DLL(或.exe)都有它自己的一组错误代码,可以使用MessageCompiler(MC.ex

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论