ATL是ActiveX Template Library(活动模板库)的缩写,它是利用C++的模板技术建立的一个库。使用ATL能够快速的开发出高效、简洁的代码,在网络迅速发展的今天,越来越多的开发者使用ATL进行组件的开发。
本小节使用ATL开发一个和上面开发的MFCCOM功能相同的进程内组件。在开发过程中,只介绍一些基本点开发步骤和使用ATL的基础知识,不涉及更复杂的内容。
1. 创建一个ATL项目框架
使用ATL COM AppWizard类型建立一个项目,项目名为ATLCOM。在向导中选择组件服务器的类型是“Dynamic Link Library(DLL)”即建立进程内组件,其它选项使用缺省,如图8-11所示。然后Finish,向导就为我们建立了一个ATL项目的框架。
图8-11 使用ATL COM AppWizard开发进程内组件
2. 添加组件对象类
开发框架搭好了,接下来要创建新的ATL对象。选择菜单Insert->New ATL Object命令,出现ATL Object Wizard向导对话框。使用这个向导对话框可以制作所有ATL支持的COM组件类。这里选择组件类的Category为Objects,建立一个简单的组件Simple Object,如图8-12所示。
然后进入下一步,在属性对话框中设置新建的ATL组件对象的属性。属性设置对话框有两个页面,分别是对象名字标识设置页(Names)和对象基本属性设置页(Attributes)。在前者的页面中,输入待建C++对象(组件对象)的名字Charset,ATL向导将同步地根据用户的输入产生其它名字,如C++类名、头文件名和cpp文件名,COM对象在类型库中的CoClass名、主接口名和在注册表中的类型名等,参见图8-13。
图8-12 ATL Object Wizard向导对话框
图8-13 组件对象名字标识设置对话框
接着,设置组件对象的基本属性。进入Attributes属性页,如图8-14所示。这里我们使用缺省设置。点击确定,向导生成CCharset类和ICharset接口(显示在ClassView中)。
组件对象的属性设置是ATL对象创建过程中最关键的部分,对于我们所使用的这三个选项,这里作一个简单说明(未使用到的三个选项将在后面章节中介绍):
对象的线程模型(Thread Model):对象的线程模型是COM对象在多线程环境下被访问时对访问方式的控制,缺省情况下采用的是套间模型Apartment,由系统通过消息队列方式提供并发控制。
对象接口模型(Interface):COM对象可以使用双接口Dual和普通接口Custom。双接口是从Automation的接口IDispatch继承的,而普通接口是从IUnknown直接继承来的。
对象的聚合模型(Aggregation):COM使用两种重用模型,在ATL中可以指定是否使用聚合,如果指定使用聚合,那么当前开发的对象就可以重用其它的COM对象。
3. 为接口添加属性(www.xing528.com)
我们为ICharset接口添加一个Length属性:在ClassView的ICharset接口处点击鼠标右键,如图8-15所示,在弹出的菜单中选择Add Property,又弹出图8-16所示的对话框,在该对话框中添加Length属性,类型为long。
图8-14 组件对象基本属性设置对话框
图8-15 为接口添加属性的方法
图8-16 在Add Property to Interface对话框中为接口添加属性
下面要实现Length属性,首先为CCharset类添加一个私有成员变量m_length(类型为long),然后修改函数get_Lenght和put_Length:
4. 为接口添加方法
添加方法和添加属性过程差不多,右击ClassView中的ICharset,选择Add Method。添加Output方法,功能和以前一样,以字符串形式输出当前的属性Length值,如图8-17所示。
图8-17 为接口添加Output方法
然后编辑该方法,代码如程序清单8-17所示。
程序清单8-17 Output方法
5. 构建组件
现在可以使用Build命令进行编译连接,生成ATLCOM.DLL组件。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。