大的类的支持,而不必直接使用 Windows SDK。
从另一个方面来看,在 ATL 工程中使用 MFC 同时就丧失了 ATL 代码轻量级的特点。
支持 MTS。
MTS 是 Microsoft Transaction Server 的缩写,它是 Microsoft 在 COM 技术方面的一个新的分支,这里不作详细说明。
完成上面的设置以后,可以选择 FINISH 完成工程的设置,ATL 将创建相应的工程。
2. 加入 ATL 类 完成工程的创建和设置以后,下一步就是向工程中加入一个新的 ATL 类。
Visual Studio 集成环境提供了向导工具“ATLObject Wizard”用于加入一个新的 ATL 类。
操作过程并不复杂,只是一组对话框操作而已。
首先通过集成环境的“Insert”菜单下的“New ATL Object…”命令进入“ATL Object Wizard”对话框。
这个对话框即为创建 ATL 对象的向导起始界面。
对话框的左边部分说明了待创建对象的基本类型,这里主要有以下的几种类型: 对象(Object)基本的 COM 对象类型; 控制(Control)ActiveX Control 类型的 ATL 对象; 其他(Miscellaneous)辅助功能,如对话框的生成等; 数据访问(Data Access)数据访问,支持 MTS 等。
右边部分说明了每种类型的详细内容,对于一般的 COM 服务程序,使用对象表中的简单对象(Simple Object)就可以了。
选定待创建对象的基本类型以后,单击“Nextgt”按钮进入下一步,进入对象属性设置对话框,如图 4 和图 5 所示。
对象属性设置分为两个过程:先是对象名字标识的设定,然后是对对象的基本属性进行设置。
首先是对象的名字标识设置。
在对象标识编辑框中输入待创建对象的名字,ATL 对象向导将同步地根据用户输入的对象标识设定该对象的 C标识和 COM 标识。
对象的 C标识包括对象的类名,cpp 文件名和头文件名。
COM 标识包括对象在类型库中的 CoClass 段和实现的主接口的名字,同时还有在系统注册表中的类型名以及 ProgID。
对象名字标识设置完成以后,选择对象属性页(Attribute)进入对象的属性设置页面。
对象的属性设置是 ATL 对象创建过程中最复杂的部分,包括以下几个主要部分: 对象的线程模型(Thread Model) 对象的线程模型是 COM 对象在多线程环境下被访问时对访问方式的控制,缺省情况下在 ATL 中采用的是套间模型Apartment,由系统通过消息队列方式提供并发控制。
对象的接口模型(Interface) COM 对象的接口可以是双接口Dual Interface。
双接口不同于普通接口Custom Interface 之处在于双接口是从Automation 基本接口 IDispatch 继承的,而普通接口是从 IUnknown 接口直接继承来的。
缺省的接口模型是双接口。
对象的聚合模型(Aggregate) COM 规范不允许对象的实现继承,但是可以通过聚合方式重用其它的 COM 对象。
ATL 对象属性设置中的聚合模型可以指定待创建的 COM 对象是否支持聚合模型。
缺省的选项是支持对象的聚合。
对象对错误处理的支持Support ISupportErrorInfo 选取这个选项可以在对象的运行过程中支持错误处理。
缺省情况下这个选项不被选中。
对象对连接点的支持Support Connection Points 连接点是 COM 对象的事件机制。
选中这个选项可以使待创建的 COM 对象具有发出事件的能力。
缺省情况下该选项不被选中。
对象对自由线程调度的支持Free Thread Marshaller 简称 FTM 对象的自由线程调度是对象在处于自由线程模型状态下,为了简化对象的访问过程而采用的一种优化策略。
缺省情况下该选项不被选中。
对于上述的任何一个选项的详细描述都涉及到 COM 技术一些核心的内容,并且都已超出本文的范围,因此本文只对ATL 给出的缺省选项加以说明,对这些内容感兴趣的读者可以参考 Microsoft 提供的文档。
完成了上面的设置以后,就可以按“OK”按钮完成对象的创建过程。
下一步就是向所生成的 ATL 类的接口中加入成员函数的定义,以及接口成员函数的实现过程。
3. 加入接口定义,实现接口函数 加入了 ATL 类定义之后,我们可以打开 Visual C集成环境下项目管理器(Workspace)中的 Class View 来检查生成的类定义的情况。
我们可以看到一个新的类已经生成,同时,还生成了相应的接口定义。
ATL Object Wizard 为我们生成了类定义的.h 和.cpp 文件,此外还有用于接口定义的 IDL 文件。
有了这些文件以后,我们就可以为接口加入成员函数,完成类的定义。
首先在 Class View 中选中相应的接口,显示为接口 IATLTest,单击鼠标右键打开菜单,如图 7。
此弹出式菜单定义了为接口加入属性和方法的操作。
选取其中的“Add Method...”项,可以为接口加入方法成员;选取“Add Property...”则可以为接口加入新的属性成员。
加入属性和方法的对话框可以参看图 8 和图 9。
如果我们要在接口中加入一个方法,则选取“Add Method...”菜单命令。
假设方法名为 ABC,方法的返回类型为 COM 规定的 HRESULT 类型。
我们也可以定义非 HRESULT 返回类型的函数,但是这需要手工修改接口定义的 IDL 文件。
我们定义 ABC 方法的一个参数为 a,类型为整数型。
完成了方法的定义以后,单击“OK”按钮则把此方法加入到接口中。
属性的加入过程是类似的。
属性加入对话框要求指定属性的类型、名字以及属性的访问方式。
在属性和方法的编辑对话框中都有一个“Attributes”按钮,在给出了一个属性或方法的基本定义之后,单击此按钮,可以对属性和方法的一些高级特性进行设置。
方法成员加入以后,我们可以通过 Class View 来检查 ATL 为我们所做的工作。
首先我们看到 ATL 在接口的定义中加入了该方法的定义;同时在对应的 ATL 类定义中,也加入了一个相应的方法的定义;在类对应的.cpp 文件中,加入了此方法.
上一篇:
网上订餐系统—计算机毕业设计(论文)
下一篇:
恋沫