vc学习笔记。
1. 名词解析。
1.1. atl
atl,active template library活动模板库,是一种微软程序库,支持利用c++语言编写asp**以及其它activex程序。通过活动模板库,可以建立com组件,然后通过asp页面中的脚本对com对象进行调用。这种com组件可以包含属性页、对话框等等控件。
1.2. ddl
数据库模式定义语言ddl(data definition language),是用于描述数据库中要存储的现实世界实体的语言。一个数据库模式包含该数据库中所有实体的描述定义。这些定义包括结构定义、操作方法定义等。
ddl描述的模式,必须由计算机软件进行编译,转换为便于计算机存储、查询和操纵的格式,完成这个转换工作的程序称为模式编译器。
模式编译器处理模式定义主要产生两种类型的数据:数据字典以及数据类型和结构定义。
数据字典和数据库内部结构信息是创建该模式所对应的数据库的依据,根据这些信息创建每个数据库对应的逻辑结构;对数据库数据的访问、查询也根据模式信息决定数据存取的方式和类型,以及数据之间的关系和对数据的完整性约束。
数据字典是模式的内部信息表示,数据字典的存储方式对不同的dbms各不相同。
数据类型和结构的定义,是指当应用程序与数据库连接操作时,应用程序需要了解产生和提取的数据类型和结构。是为各种宿主语言提供的用户工作区的数据类型和结构定义,使用户工作区和数据库的逻辑结构相一致,减少数据的转换过程,这种数据类型和结构的定义通常用一个头文件来实现。
数据库模式的定义通常有两种方式: 交互方式定义模式和通过数据描述语言 ddl 描述文本定义模式。
2. 简介。
2.1. atl
2.1.1. 概述。
自从2024年microsoft首次公布了com技术以后,windows平台上的开发模式发生了巨大的变化,以com为基础的一系列软件组件化技术将windows编程带入了组件化时代。广大的开发人员在为com带来的软件组件化趋势欢欣鼓舞的同时,对于com开发技术的难度和烦琐的细节也感到极其的不便。com编程一度被视为一种高不可攀的技术,令人望而却步。
开发人员希望能够有一种方便快捷的com开发工具,提高开发效率,更好地利用这项技术。
针对这种情况,microsoft公司在推出com sdk以后,为简化com编程,提高开发效率,采取了许多方案,特别是在mfc(microsoft foundation class)中加入了对com和ole的支持。但是随着internet的发展,分布式的组件技术要求com组件能够在网络上传输,而又尽量节约宝贵的网络带宽资源。采用mfc开发的com组件由于种种限制不能很好地满足这种需求,因此microsoft在2024年又推出了一种全新的com开发工具atl。
atl是activex template library 的缩写,它是一套c++模板库。使用atl能够快速地开发出高效、简洁的**(effective and slim code),同时对com组件的开发提供最大限度的**自动生成以及可视化支持。为了方便使用,从microsoft visual c++ 5.
0版本开始,microsoft把atl集成到visual c++开发环境中。2024年9月推出的visual studio 6.0 集成了atl 3.
0版本。目前,atl已经成为microsoft标准开发工具中的一个重要成员,日益受到c++开发人员的重视。
atl究竟给开发人员带来了什么样的益处呢?这还要先从atl产生以前的com开发方式说起。
在atl产生以前,开发com组件的方法主要有两种:一是使用com sdk直接开发com组件,另一种方式是通过mfc提供的com支持来实现。
直接使用com sdk开发com组件是最基本也是最灵活的方式。通过使用microsoft提供的开发包,我们可以直接编写com程序。但是,这种开发方式的难度和工作量都很大,一方面,要求开发者对于com的技术原理具有比较深入的了解(虽然对技术本身的深刻理解对使用任何一种工具都是非常有益的,但对于com这样一整套复杂的技术而言,在短时间内完全掌握是很难的),另一方面,直接使用com sdk要求开发人员自己去实现com应用的每一个细节,完成大量的重复性工作。
这样做的结果是,不仅降低了工作效率,同时也使开发人员不得不把许多精力投入到与应用需求本身无关的技术细节中。虽然这种开发方式对于某些特殊的应用很有必要,但这种编程方式并不符合组件化程序设计方法所倡导的可重用性,因此,直接采用com sdk不是一种理想的开发方式。
使用mfc提供的com支持开发com应用可以说在使用com sdk基础上提高了自动化程度,缩短了开发时间。mfc采用面向对象的方式将com的基本功能封装在若干mfc的c++类中,开发者通过继承这些类得到com支持功能。为了使派生类方便地获得com对象的各种特性,mfc中有许多预定义宏,这些宏的功能主要是实现com接口的定义和对象的注册等通常在com对象中要用到的功能。
开发者可以使用这些宏来定制com对象的特性。
另外,在mfc中还提供对automation 和 activex control的支持,对于这两个方面,visual c++也提供了相应的appwizard和classwizard支持,这种可视化的工具更加方便了com应用的开发。
mfc对com和ole 的支持确实比手工编写com程序有了很大的进步。但是mfc对com的支持是不够完善和彻底的,例如对com接口定义的idl语言,mfc并没有任何支持,此外对于近些年来com和activex技术的新发展mfc也没有提供灵活的支持。这是由mfc设计的基本出发点决定的。
mfc被设计成对windows平台编程开发的面向对象的封装,自然要涉及windows编程的方方面面,com作为windows平台编程开发的一个部分也得到mfc的支持,但是mfc对com的支持是以其全局目标为出发点的,因此对com 的支持必然要服从其全局目标。从这个方面而言,mfc对com的支持不能很好的满足开发者的要求。
随着internet技术的发展,microsoft将activex技术作为其网络战略的一个重要组成部分大力推广,然而使用mfc开发的activex control,**冗余量大(所谓的“肥** fat code”),而且必须要依赖于mfc的运行时刻库才能正确地运行。虽然mfc的运行时刻库只有部分功能与com有关,但是由于mfc的继承实现的本质,activex control必须背负运行时刻库这个沉重的包袱。如果采用静态连接mfc运行时刻库的方式,这将使activex control**过于庞大,在网络上传输时将占据宝贵的网络带宽资源;如果采用动态连接mfc运行时刻库的方式,这将要求浏览器一方必须具备mfc的运行时刻库支持。
总之mfc对com技术的支持在网络应用的环境下也显得很不灵活。
解决上述com开发方法中的问题正是atl的基本目标。
首先atl的基本目标就是使com应用开发尽可能地自动化,这个基本目标就决定了atl只面向com开发提供支持。目标的明确使atl对com技术的支持达到淋漓尽致的地步。对com开发的任何一个环节和过程,atl都提供支持,并将与com开发相关的众多工具集成到一个统一的编程环境中。
对于com/activex的各种应用,atl也都提供了完善的wizard支持。所有这些都极大地方便了开发者的使用,使开发者能够把注意力集中在与应用本身相关的逻辑上。
其次,atl因其采用了特定的基本实现技术,摆脱了大量冗余**,使用atl开发出来的com应用的**简练高效,即所谓的“slim code”。atl在实现上尽可能采用优化技术,甚至在其内部提供了所有c/c++开发的程序所必须具有的c启动**的替代部分。同时atl产生的**在运行时不需要依赖于类似mfc程序所需要的庞大的**模块,包含在最终模块中的功能是用户认为最基本和最必须的。
这些措施使采用atl开发的com组件(包括activex control)可以在网络环境下实现应用的分布式组件结构。
第三,atl的各个版本对microsoft的基于com的各种新的组件技术如mts、asp等都有很好的支持,atl对新技术的反应速度大大快于mfc。atl已经成为microsoft支持com应用开发的主要开发工具,因此com技术方面的新进展在很短的时间内都会在atl中得到反映。这使开发者使用atl进行com编程可以得到直接使用com sdk编程同样的灵活性和强大的功能。
本文的目的就是希望在有限的篇幅中能够使读者对atl的使用和基本原理有一个初步的了解,为广大的com开发人员更好地使用atl开发起到抛砖引玉的作用。
2.1.2. atl基本技术。
虽然使用atl开发com 应用是一件非常简单的事情,但是在atl简单易用的界面后面却包含着复杂的技术。面对atl生成的大量**,我们即使不去深入地了解这些**的含义也可以开发出com应用来,但是如果我们要充分地挖掘atl的潜力,开发出更灵活、强大的com应用,则必须对atl使用的基本技术有所了解。研究atl的实质最好的教材就是由visual c++提供的atl源**。
本文这一部分只是对atl中用到的最基本的技术进行简单的介绍。
VC 学习笔记
vc 1 q a 2c 语法 2 杂项 2typedef 2 switch语句 3 include的写法 4 define的用法 4 声明 4函数的整体结构 4 类 4抽象,继承,封装,多态性 5 虚函数 5纯虚函数 5 函数重载 5 const 6 指针和引用传递参数 7 this指针 8 c 构...
VC 学习笔记
vc 1 q a 2c 语法 2 杂项 2typedef 2 switch语句 3 include的写法 4 define的用法 4 声明 4函数的整体结构 4 类 4抽象,继承,封装,多态性 5 虚函数 5纯虚函数 5 函数重载 5 const 6 指针和引用传递参数 7 this指针 8 c 构...
VC学习笔记
进制转换字符串 char buf 8 int pname null itoa pname,buf,16 整形进制转换成进制字符串 this m pname buf updatedata false 格式化字符串 cstring pname int monname null s monname 格式化...