|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
由于ASP还是一种Script语言所没除了大量使用组件外,没有办法提高其工作效率。它必须面对即时编绎的时间考验,同时我们还不知其背后的组件会是一个什么样的状况;c++
咱们已看到用COM办事器组件关于创立一个基于收集的使用法式的主要性,但成绩不在因而否创立它们,而在于用甚么言语去创立。一种选择是用C++。
人们对C++有很多分歧的意见,守旧的C++法式员保持用其他言语创立COM组件,他们以为只要真实的法式员利用C++。另外一方面,VB法式员以为C++是一种很难把握和利用的言语,没有需要增添编程工夫和停止困难的测验考试。Java法式员以为他们比C++法式员强,由于James Gosling(Java的创造者)接收了很多言语(包含C++ )的长处创造了Java,本章和下一章的目标就是消弭对C++的成见和毛病概念。
本章集中引见用C++ 创立办事器组件,不讲述C++言语,假如想学C++ ,请参阅Ivor.Horton著的《Beginning Visual C++6》,Wrox 出书,书号为ISBN 1-861000-88-X。
本章的次要内容有:
? C++简史。
? 利用C++缘由。
? 从VB移植到C++。
? ATL、STL和MFC引见。
? 创立一个COM组件。
? 毛病处置与调试。
更主要的是应当记住,如今,不只是在用C++创立组件,可使用Visual C++中可用的任何东西,使得创立进程加倍轻易。先从C++的发源谈起。
17.1 C++言语
在决意是不是利用C++言语之前,最好是弄清晰这类言语的本色,让咱们看一下C++的汗青和近况。
17.1.1 C++简史
刚入手下手构成的是C言语,那些想创立更快更无效的代码的法式员十分浏览C言语,有一名名叫Bjarne Stroustrup的人却不知足于仅仅是临盆疾速代码,他想创立面向对象的C言语编程。他入手下手对C言语的内核停止需要的修正,使其能知足面向对象模子的请求。C++从此发生。
Bjarne Stroustrup是C++的最后设计者和完成者。它自出生以来,经由开辟和扩大已成一种完整成熟的编程言语。如今C++已由ANSI、BSI、DIN、其他几个国度尺度机构和ISO定为尺度。ISO尺度于1997年11月4日经投票正式经由过程。
C++尺度演化了很多年。C++模板是近几年来对此言语的一种扩大,模板是依据类型参数来发生函数和类的机制,有时也称模板为“参数化的类型”。利用模板,可以设计一个对很多类型的数据停止操作的类,而不需求为每一个类型的数据创立一个独自的类。尺度模板库(Standard Tempalte Library,STL )和微软的举动模板库(Active Tempalte Library,ATL )都基于这个C++言语扩大。
C++尺度可分为两局部, C++言语自己和C++尺度库。C++尺度库关于Visual C++是相当新的,实践上微软只是在宣布Visual C++ 5.0时去除一些“bug”。尺度库供应了尺度的输出/输入、字符串、容器(如矢量、列表和映照等)、非数值运算(如排序、搜刮和兼并等)和对数值盘算的撑持。应当说, C/C++包括了绝对少的关头字,并且良多最有效的函数都来历于库,C++尺度库完成容器和算法的局部就是STL。
STL是数据布局和算法的一个框架,数据布局包含矢量、列表和映照等,算法包含这些数据布局的查找、拷贝和排序等。1994年7月,ANSI/ISO C++尺度委员会投票决意承受STL为C++尺度库的一局部,这个建议是依据Alex Stepanov、Meng Lee和David Musser这三人的编程和软件库研讨提出的。STL的发生是为了知足通用性的设计方针,而不是为了进步功能。
那末微软对C++尺度的立场怎甚么样?微软运转VC++与Plum-Hall C++,想对照失掉的分数在92%和93%之间。为何不是100%的一个缘由是跟踪这个尺度并同时创立一个编译器对照坚苦,微软也思索了对现有编码兼容的主要性,有时他们不能不偏离尺度以坚持这个兼容性。
17.1.2 利用C++的缘由
应当有充实的来由利用C++创立办事器组件,而不只是为了给下属一个好印象才利用C++。假如之前没用过C++,你必需要全力进修。
1. 功能
功能有个两方面,算法速度和机械代码效力。一个算法可以界说为数据经由过程体系的概念化的途径,它描写一些点,在这些点上,数据可以被操作并可转换发生某个了局。例如,一个算法界说为获得一个字符串,盘算字符串中的字符个数,并作为了局前往的进程。算法与
言语是自力的,所以在编程之前必需设盘算法,编写一个疾速法式的第一个步调是设计优秀的算法,能以起码的操作步调得出成绩的谜底。第二个步是选择言语,这也影响法式的速度。
从功能的角度思索,用汇编言语编写法式是最好的选择,它是盘算性能了解的天然言语。然而,几近没有人用汇编言语编写完全的法式,由于如许做极为有趣。另外一个最好的选择是C言语。但是,由VC++供应的一切东西都发生C++,而不是C。利用VC++的导游可以生成大批的利用代码,而不用人工地编写代码。从编写法式的难易水平和法式的功能综合思索, C++是最好的选择。
C++功能优秀,由于它被编译为机械代码。关于VBScript和Java等言语,代码在运转时由法式注释,并且每次运转法式时都要将代码转换为机械码,如许做效力对照低,不单单是已编译过的C++法式运转得较快,并且微软C++编译器已存在多年。这意味着微软的编译器法式员已把很多长处集中到编译器上,乃至于它能发生十分高效的机械码。由于C++是编译言语,并且十分天然,比VB更接近机械代码,所以由C++编译器发生的代码必定比VB的编译代码效力更高。
2. 毛病处置
一个好的法式与一个巨大的法式的区分就是其是不是具有优秀的毛病处置撑持。实践上,假如在完成中起首停止毛病处置,而不是在最初才停止,那末全部法式的开辟和测试进程会加倍完善。然而,毛病处置只能与言语所撑持的内容相分歧。
VBScript具有根基的毛病处置撑持功效。在默许情形下,不克不及捕捉VBScript中的毛病。每次嫌疑发生毛病时,要挪用On Error Resume Next功效,并反省Error对象。
而C++中的毛病处置对照好,这是由于有“异常处置”,本章的前面局部将具体引见。
3. 最小的依附性
正如下面所说,C++是一种编译言语,即C++代码在履行之前已转换为机械码。只需此代码不依附于内部的静态链接库(DLL),C++就能够在不需求装置额定法式的情形下挪动到运转一样操作体系的其他机械和微处置器上,而挪动Java法式时需求先装置Java运转期库。
4. 使用现有的代码
因为C和C++已存在很多年了,如今有很多可使用的代码,你的办事器组件可使用现有的C/C++代码或库。例如统计库和到老体系的C接口。
5. 最大化COM特点
COM与C++很接近,实践上, Don Box(COM的威望)在他的《Essential COM》一书的第一章写道:“COM就是更好的C++”。他申明了COM标准是若何从C++言语纪律中发生出来的。经由过程了解C++,会对COM有更深的了解。
某些言语不克不及使用一切的COM特点,而在C++中,几近可使用一切的COM特点。
17.1.3 不利用C++的缘由
晓得甚么时分利用C++是主要的,一样,晓得甚么时分不利用C++也是主要的。想像一下那些临时保护代码的人,假如他们中没有一些C++法式员撑持C++,那末开辟者们不能不把目光转向别的一些他们熟习的言语。
改动C++组件时,为了看到这些改动的了局,必需从头编译该组件代码,这会消费很长的开辟工夫。C++不克不及像ASP页面代码那样,只利用记事本,改动代码的一行,从头装载而失掉了局。因而,假如某些任务需求常常变更(如原型),不要用C++。
在C++中,对一些致命的毛病不克不及取得更多的回护,写一个使组件溃散的代码是很轻易的。这是为了供应疾速代码而支付的价值, C++不会停上去去反省代码是不是按设计运转可否使法式不溃散依附于开辟者的技能。假如在这方面花的工夫较少或方才进修C++,最好不要利用C++。比及已意想到C++中一切轻易犯的毛病,并且在检测组件之前花了很多工夫,才可使用C++,假如想很快、很轻易地创立一个组件,并且也不思索该组件的履行速度,那末利用VB吧!
17.1.4 把ASP技能转到C++上
进修新器材的最好办法就是使用现有的技能。关于ASP开辟者来讲,已进修了C++所请求的很多技能,出格是,JScript语法和ActiveX或COM的面向对象编程的概念。
1. JScript
大局部ASP开辟者都用JScript在阅读器上利用DHTML。JScript的语法与C十分类似,所以,假如晓得JScript,那末就晓得根基的C语法。固然,只是C++语法的子集。C++有很多额定的语法来撑持面向对象编程,这就是咱们下一步要做的。
2. 面向对象编程
假如你在VB中利用过类(class),则对任何COM对象和文档对象模子(Document ObjectModel,DOM )都应熟习,由于已有了面向对象编程(OOP)的概念。在后面已说过, C和C++的区分是C++撑持面向对象编程。
Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。 |
|