当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > VC > 基础教程类 > 正文

本版Visual C++的新特性

http://www.zk168.com.cn  招考学习网 2006-4-12 16:25:00
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
    近来软件开发界流传的一个词是Internet。你现在见到的每个产品都具备某些与Internet相关的小玩意儿,Visual C++也不例外。在本书中我们将考察与Internet相关的新特性和升级特性。表1.1列出了Visual C++新特性的完整列表,并显示了哪些版本包含这些新特性(显然,企业版包含的特性最完整)。在随后的段落中你会找到Visual C++ Internet特有特性的概览,从而决定Visual C++如何最佳地来满足你的Internet、桌面以及数据库编程的需要。
    


      /GZ编译器选项(在调试模式下捕获发行版本中的错误)
    你曾经遇到过在你的发行版中碰到了运行错误,但在调试模式错误又消失得无影无踪的情况吗?/GZ编译器选项正是用于帮助你排除这类错误的法宝。该编译选项允许你使用/O1,/O2,/Ox或/Og优化开关,从而找出发行版错误的根源。然而,这时Visual C++依然对代码中任何以#pragma开始的语句进行优化,这就是说,有可能不会找出所有的优化缺陷。除此之外,/GZ编译器选项还将完成下述三项任务:
    自动初始化局部变量 Visual C++将自动把局部变量初始化为值OxCC,这样你就会更快地找出未初始化的变量。该选项还会以C4700,这样你就会更快地找出未初始化的变量。该选项还会以C4700或C4701警告信息让你找到未正常引用的变量。
    函数指针调用栈有效性检查 Visual C++检查每个函数,确保函数正常地使用堆栈。函数退出时检查ESP寄存器的值,以确保与函数进入时的值相同。这种检查让你能够发现,在使用函数指针调用函数时被调用函数期待的清理堆栈方式与调用函数提供的清理堆栈方式之间的不匹配情况
    调用堆栈有效性检查 Visual C++在每个调用结束时检查堆栈指针(ESP寄存器),以保证该指针没有发生变化。这种检查让你能够发现内联汇编例程或函数调用中不匹配的错误。
    强制内联关键字
    强制内联关键字在Visual C++的前一个版本中已经提供,在这个版本中功能又进一步得到了增强。通过把被调用函数直接展开到调用函数内部的方法,内联函数避免了函数调用的消耗。使用内联函数可以加快应用程序的运行速度,然而不幸的是,内联代码也增加了可执行代码的长度,原因在于每当内联函数被调用时,都要嵌入到调用函数中。
    正常情况下,Visual C++要对内联函数进行成本分析,以确定使用内联方式增加的代码长度是否能够得到相应的速度优势。在两种情况下,Visual C++按正常方式创建内联函数的独立副本并以函数方式而不是内联方式调用它:递归函数调用和在转换单元其它地方引用的函数。
    强制内联关键字通知Visual C++不执行正常的成本分析并且总把内联函数编译成内联代码,换句话说,程序员负责考虑某些情况下(比如递归函数调用)可能产生极大规模代码的问题。因此,在使用这个新的关键字时要十分小心,确保代码的规模保持在合理的范围内。
    即使使用了_ _强制内联关键字,在某些情况下编译程序依然不生成内联代码。例如,使用/Ob0命令行开关(调试模式的一个开关)就不生成内联代码。不能生成内联代码的另一种情况是被调用函数使用了变长参数表。无论什么情况下,当编译器不能生成内联代码时,它都会向你发出第一级的警告信息(编号为4714)。
    ADO数据绑定
    Microsoft不断地努力改进其编程语言产品的数据访问能力。ADO(ActiveXData Object,ActiveX数据对象)代表了提供数据访问的一条新的途径,它通过把数据绑定ActiveX控件与ADODC(ADO Data Control,ADO数据控件)结合起来来实现。ADODC作为数据源定义了要显示信息的存储位置和数据访问需求。需要为ADODC提供六段信息:OLE-DB提供者的名称(比如SQL Server)、DSN(像在控制面板的ODBC设置中那样指定的数据源名称)、用户名、保密字、记录源(通常是个SQL查询)以及连接字符串。ActiveX控件用于显示数据源的内容。
    与以前的数据库访问方法相比,ADO有数项优点。下面就为你介绍这些优点:
    独立地创建对象 你不再需要必须遵循对象的层次。这一特性允许你只创建所需要的对象,从而减少了内存需求并加快了应用程序的运行速度。
     成批更新 代替把每次更新都发送给服务器,你可以在本地内存中收集这些更新然后一次将所有更新都发送给服务器。这样我们就改进了应用程序的性能(原因在于可以在后台进行更新),并降低了网络的负载。
    存储过程 存储过程作为数据库管理器的一部分驻留在服务器上,并且能够在指定数据集上完成特定的任务。ADO支持使用带有输入/输出参数和返回值的存储过程。
    多种游标类型 从本质上讲,游标指向当前要操作的数据。理论上说,你甚至可以使用特定的后台游标。
    返回行数限制 你只得到能够满足用户实际数据需求的数据量。
    多记录集对象 该功能支持操作存储过程或批处理过程返回的多个记录集。
    自由线索化对象 增强了Web服务器的功能。
    有两种数据绑定模型可用于ActiveX控件。第一个模型是简单的数据绑定,它允许使用像文本框这样的ActiveX控件显示一条记录的一个字段;第二个模型是复杂的数据绑定,它允许使用像网格这样的ActiveX控件同时显示多条记录的多个字段。复杂的数据绑定也要求ActiveX控件管理要显示哪些记录和哪些字段,这是简单数据绑定时ADODC通常要完成的任务。
    Visual C++本身带了一些支持ADO的ActiveX控件,其中包括:
    DataGrid
    DataCombo
    DataList
    Hierarchical Flex Grid
    Date and Time Picker
    ATL复合控件
    这一特性让你能够按自己的方式使用其它控件创建出新的ATL(Active Tem-plate Library,活动模板库)控件。定制这样的控件时要打开一个对话框,然后在对话框中填入窗口和ActiveX控件。该对话框占据了新控件的整个客户区。使用这两个向导之一能够创建ATL复合控件:ATL COM AppWizard或ATLObject Wizard。
    绝大多数程序员使用这项技术的原因是它能够创建一个作为单一ActiveX控件显示的窗体。例如,如果你现在正要求用户下载一个有许多控件的窗体来显示Web页面,那么使用ATL复合控件可以减低下载任务的复杂性。当你修改了ATL复合控件时,用户只需要下载一个控件也就可以了。这种下载方式不仅加快了控件的下载速度,而且也降低了下载失败的可能性(要么下载整个控件,要么不下载棗而不会下载部分窗体)。
     AutoCompletion
    AutoCompletion特性帮助你完成C++头文件和源代码文件中的语句。应用该功能时,你会看到一个带有完成代码行可能选项的列表框。例如,考虑下面的代码:
    CString oMyString;
    oMyString.
    当你在oMyString后输入圆点时,你就会看到一个包含了CString对象的各种方法和属性的列表框,此时,你可以向下滚动列表框,找到所需的属性或方法后单击该属性或方法,相应的属性或方法就会填充到原点后面。当然也可以输入你要使用的方法或属性的前几个字母,列表框会随着输入过程的进行而朝希望的名称滚动。一旦你选择了某个方法或属性,Visual C++将自动键入你要使用的属性或方法的名称。这样就大大减少了文字输入的时间,从而有更多的时间编写代码。
    !!!技巧 如果你的环境中丢失了AutoCompletion列表框,那么在该列表框先前出现过的地方右击,然后从上下文菜单中选择List Members菜单项,这个列表框就会重新显示在你的面前。
     现在假定你正在查看AutoCompletion列表框,但还不能肯定CString对象的AnsiToOem()方法存在的限制。如果你加亮这个列表项并把鼠标指针放置到这个列表项上,就会看到一个气球帮助,它告诉你该方法最多可处理255个字符。这种气球型帮助正是Visual C++的另一个新特性,称做文档注释(Doc Com-ment)。
    文档注释并不仅仅是Visual C++软件包的一部分,你也可以把这样的注释添加到你的函数和变量上。方法很简单,你所要做的就是或者在函数或变量说明的前面加上一条注释,或者把注释放置到变量或函数说明的同一行上。利用这个特性你可以向其他人提供函数或变量的各种信息。显然,你不会希望把这个注释弄得很大,Microsoft把文档注释的长度限制为12行,对绝大多数情况来说在这个限制下也足够使用了。
    文档注释并不局限于在AutoCompletion列表框中使用。把鼠标指针放置到某个变量或函数上,你会看到在与AutoCompletion列表框中显示的相同的文档注释气球。正如你所看到的,文档注释是为你的应用程序提供连续文档的迅捷方法,并且也使得阅读你的代码的其他人更方便地理解代码。
    改进的ClassView和WizardBar
    Microsoft为ClassView和WizardBar都提供了一些新特性。下面的列表予以介绍:
    删除成员函数 现在不需要你做许多工作就可以删除成员函数了。你所必须完成的所有任务就是把光标放置到成员函数内部,然后从WizardBarAction下拉列表框中选择Delete或在ClassWizard对话框的Message Maps选项卡中选择Delete Function。无论使用哪种方法,Visual C++都从头文件中删除函数声明并在源代码中注解掉函数体。这种处理方式让你在需要被删除掉的函数时,可以轻易地恢复该函数。
    转移到对话框编辑器 这个功能只在创建对话框风格的应用程序时可以使用。选择包含所需对话框的类,然后在WizardBar Action下拉列表框中选择Go to Dialog Editor选项。
    新窗体 向你的工程中添加新的窗体。你会看到一个New Form对话框,在这个对话框中选择窗体名、窗体的基类(最常用的基类包括CdaoRe-cordView,CformView,CDialog以及CRecordView)、以及资源编号。基类的选择部分依赖于你正创建的应用程序的类型和使用应用程序向导过程中所做的各种选择。某些情况下,你也将可以选择自动化方式并提供文档的模板信息。当某些选项当前不能使用时,Visual C++会把这些选项变成灰色方式显示。
    跟踪空类 现在WizardBar可以跟踪所有类,即使那些没有成员函数的类也一样能够跟踪。如果你选择了某个没有成员函数的类,那么Wizard-Bar的Members组合框中将显示“No Members - Create New Class”。缺省的WizardBar动作是向空类中添加一个新的成员。
    注 使用Insert | New Form命令也可以打开New Form对话框。
    命令行参数
    Visual C++提供了一个崭新的MSDEV实用程序,利用这个实用程序,你可以直接从命令行来编译工程,而无须首先移出MAKE文件、然后再使用NMAKE实用程序来完成编译。MSDEV实用程序的语法为:
     MSDEV <Filename> [/MAKE "<Project Name> - <Configuration Name> |
    ALL"] [/REBUILD /CLEAN /NORECURSE /OUT <Log File> /USEENV]
    你必须提供DSP(工程)或DSW(工作区)文件名。下面的文字描述了可选的命令行开关:
    /MAKE 该选项让指定编译时使用的工程和配置。工程名(ProjectName)总是工程创建过程中你为工程起的名称。配置名(ConfigurationName)既可以是像Win32 Debug这样的特定名称,也可以是所有可用的配置(使用ALL关键字)。Visual C++支持在一行上使用多个/MAKE参数,因此,你可以创建任意多个配置。
    /REBUILD 在开始编译前首先清除所有中间文件,然后建立新的中间文件。这种方式保证进行完整编译。
    /CLEAN 在开始编译前首先清除所有中间文件,但并不重建中间文件。
    /NORECURSE 编译当前工程,但并不编译与该工程相关的其他工程。
    /OUT <Log File> 把屏幕输出重定向到一个记录文件中。利用该记录文件可以分析编译中发现的错误并进行相应校正。
    /USEENV 忽略DSW或DSP文件中的tools.options.directories设置,并用当前环境中的设置进行替代。这样就可以不用重新打开Visual C++而覆盖环境设置,但这种做法也意味着可能会产生错误。
    全面改进的编译器
    编译大型PCH文件的工程将花费更少的时间。虽然你会注意到对小型工程速度的改进,但对使用大型PCH文件的工程来说,这种改进更加明显。
    延迟加载移入
    正常情况下,有两种方式使用DLL:可以让应用程序自动加载DLL,也可以根据需要手工地加载和卸载DLL。延迟加载特性为你提供了第三种选择,它允许应用程序在需要时自动加载DLL。这就是说,如果用户未要求使用某种服务棗比如说你的字处理应用程序中的拼写检查棗那么系统就不会加载相应的DLL。
    对程序员来说,使用这一特性并不需要做多少工作。你要完成的所有任务就是在链接应用程序时加上/DELAYLOAD命令行开关并把DELAYIMP.LIB添加到链接文件列表中。
    动态HTML
    新的MFC类CHTML允许你把动态HTML(DHTML)视图添加到你的应用程序中。这个类真正的功能就是在不需要多做多少编程的情况下可以把Web浏览器加入到应用程序中。显然,由于Visual C++是微软的产品,你的应用程序中的Web浏览器将是Internet Explorer 4特性的翻版。这个特性让你能够以对用户近乎透明的方式把桌面应用和Internet应用混合在一起。
    动态语法分析
    随着向应用程序中键入新的类、函数以及变量信息,ClassView现在能够自动进行更新。这样我们随时都可以看到应用程序中的变化而无须等待将它们保存到源文件中。这个特性也意味着像WizardBar和ClassWizard这样的部件总是最新的。
    注释 这个特性现在还存在一些问题,微软许诺在该产品发行时这些问题将得到纠正。例如,某些输入错误将会导致Visual C++不正确地猜测你的意图,结果造成了IDE的死循环。在所有情况下,重新启动IDE就会清除这样的问题。
    编辑和继续特性
    编辑和继续特性让你能够在调试应用程序时对应用程序做些小的改动,而无须从头重建工程。这个特性不仅让我们能够进行更快速的调试,而且也可以对应用程序执行“如果棗那么”类型的分析。
    使用编辑和继续特性时也存在一些限制。如果修改的代码超过了编辑和继续特性能够完成的范围,那么Visual C++简单地提示你重建工程。下面的列表给出了不能使用编辑和继续特性的一般原则:
    ·头文件
    ·全局/静态数据
    ·类定义和函数原型
    ·引入新的变量类型
    ·例外处理模块
     编辑和继续特性在缺省情况下是打开的,因此使用该特性时不需要做任何特殊的工作。如果想关闭该特性,那么使用Tools | Options命令来显示Options对话框,选择Debug选项卡,不选中Debug Commands Invoke Edit and ContinueDebugging选项。当打开或关闭该特性后,需要完整地重建工程。
    扩展存储过程向导
    存储过程让你能够以某种方式操作数据库中的数据并把结果输出给用户。Visual C++提供了一个新的向导帮助你创建SQL Server的存储过程。这些存储过程使用了带有名称为Extended stored procedure(扩展存储过程)的函数的COM接口。当我们在SQL Server上注册了扩展存储过程DLL后,就可以访问使用标准COM接口检索出的数据了。
    新的调试特性
     Visual C++提供了丰富的新调试特性,这些特性让你能够更容易地找出应用程序中存在的缺陷。表1.2列出了所有这些新特性,并给出了每个特性的简单描述。
    


    OLE-DB提供者模板
    使用OLE-DB提供者模板可以开发OLE-DB访问接口,特别是到远程数据库的连接。该模板并不完成什么神奇的功能,它所完成的任务也就是把访问OLE-DB技术的过程变得容易些。OLE-DB是微软最新的数据库技术,它用于为包含OLE-DB提供者的数据库管理系统(DBMS)提供高性能的数据访问。
    数据绑定控件的资源编辑器改进
    资源编辑器(Resource Editor)让你可以使用所有最新的ADO和OLE-DB技术来创建与数据库的连接,你需要使用新型的ADODC数据源控件来创建连接。另外,还需要使用新型,与ADO兼容的数据绑定控件显示数据。这条规则的唯一例外情况是简单的绑定控件,我们可以使用这类控件在ADODC和MSRDC(Microsoft Remote Data Control,微软远程数据控件)数据源控件之间内部交换数据。
    对DocObject包容特性的向导支持
    MFC应用向导(AppWizard)在第三步中包含了一个新的选项,该选项只在选中了Container或Both Container and Server复合文档特性选项后才有效。
    利用DocObject包容特性(同时打开Active Document Container选项),你可以把应用程序支持的所有类型的文档包含在一个框架中,而不需要对每类文档分别创建不同类型的框架。如果想准确地感受一下这种技术到底如何工作,那么就请看一看Microsoft Office Binder吧。正常情况下,OLE允许用户与复合文档中的一个对象进行交互,而DocObject包容技术让用户能够在一个框架中激活整个文档,包括菜单、工具条以及其它所支持的特性。
    WizardBar性能增强
    当资源编辑器中的WizardBar可见时,带大量对话框和控件的(其CLW文件很大)工程通常慢如蜗牛。Microsoft已经采取措施改进了这项特性的性能,从而减少了WizardBar对IDE性能的冲击。
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
·人力资源发展:性质、时代的挑战、意义和趋势
·环保企业人力资源开发与管理的实证研究————巨龙公
·21世纪以煤和天然气为原料的C1化学
·燃气锅炉的发展与经济性比较
·重油制气污水处理系统(A/O)技术改造
·论审计的防护性和建设性
·论重要性原则与会计报表真实性审计
·谨慎性原则在《企业会计准则—非货币性交易》中
·中美《非货币性交易会计准则》差异浅析
·西方非货币性交易的会计处理简介
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>