COM组件设计与应用之VC6中用ATL写组件
发布时间:2006-05-13 13:31:16 来源:VCKBASE 网友评论 0 条1、如果你在使用 vc5.0 及以前的版本,请你升级为 vc6.0 或 vc.net 2003;
2、如果你在使用 vc6.0 (ATL 3.0)请阅读本回内容;
3、如果你在使用 vc.net(ATL 7.0)请阅读下回内容;(当然读读本文内容也不错)
4、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFun,它有两个函数: Add()完成两个数值的加法,Cat()完成两个字符串的连接。
5、下面......好好听讲! 开始了:-)
二、建立 ATL 工程
步骤2.1:建立一个工作区(WorkSpace)。
步骤2.2:在工作区中,建立一个 ATL 工程(Project)。示例程序叫 Simple1,并选择DLL方式,见图一。
图一、建立 ATL DLL 工程
Dynamic Link Library(DLL) 表示建立一个 DLL 的组件程序。
Executable(EXE) 表示建立一个 EXE 的组件程序。
Service(EXE) 表示建立一个服务程序,系统启动后就会加载并执行的程序。
Allow merging of proxy/stub code 选择该项表示把“代理/存根”代码合并到组件程序中,否则需要单独编译,单独注册代理存根程序。代理/存根,这个是什么概念?还记得我们在上回书中介绍的吗?当调用者调用进程外或远程组件功能的时候,其实是代理/存根负责数据交换的。关于代理/存根的具体变成和操作,以后再说啦......
Support MFC 除非有特殊的原因,我们写 ATL 程序,最好不要选择该项。你可能会说,如果没有MFC的支持,那CString怎么办呀?告诉你个秘密吧,一般人我都不告诉他,我后半辈子就靠着这个秘密活着了:
1、你会STL吗?可以用 STL 中的 string 代替;
2、自己写个 MyString 类,嘿嘿;
3、悄悄地、秘密地、不要告诉别人(特别是别告诉微软),把 MFC 中的 CString 源码拿过来用;
4、使用 CComBSTR 类,至少也能简化我们字符串操作;
5、直接用 API 操作字符串,反正我们大家学习 C 语言的时候,都是从这里干起的。(等于没说,呵呵)
Support MTS 支持事务处理,也就是是否支持 COM+ 功能。COM+ 也许在第 99 回介绍吧。
三、增加 ATL 对象类
步骤3.1:菜单 Insert/New ATL Object...(或者用鼠标右键在 ClassView 卡片中弹出菜单)并选择Object 分类,选中 Simple Object 项目。见图二。
图二、选择建立简单COM对象
Category Object 普通组件。其中可以选择的组件对象类型很多,但本质上,就是让向导帮我们默认加上一些接口。比如我们选 "Simple Object",则向导给我们的组件加上 IUnknown 接口;我们选 "Internet Explorer Object",则向导除了加上 IUnknown 接口外,再增加一个给 IE 所使用的 IObjectWithSite 接口。当然了,我们完全可以手工增加任何接口。
Category Controls ActiveX 控件。其中可以选择的 ActiveX 类型也很多。我们在后续的专门介绍 ActiveX 编程中再讨论。
Category Miscellaneous 辅助杂类组件。
Categroy Data Access 数据库类组件(我最讨厌数据库编程了,所以我也不会)。
步骤3.2:增加自定义类 CFun(接口 IFun) ,见图三。
图三、输入类中的各项名称
其实,我们只需要输入短名(Short Name),其它的项目会自动填写。没什么多说的,只请大家注意一下 ProgID 项,默认的 ProgID 构造方式为“工程名.短名”。
步骤3.3:填写接口属性,见图四。
图四、接口属性
Threading Model 选择组件支持的线程模型。COM 中的线程,我认为是最讨厌,最复杂的部分。COM 线程和公寓的概念,留待后续介绍。现在吗......大家都选 Apartment,它代表什么那?简单地说:当在线程中调用组件函数的时候,这些调用会排队进行。因此,这种模式下,我们可以暂时不用考虑同步的问题。
Interface 接口基本类型。Dual 表示支持双接口,这个非常 非常重要,非常非常常用,但我们今天不讲。Custom 表示自定义借口。切记!切记!我们的这第一个 COM 程序中,一定要选择它!!!!(如果你选错了,请删除全部内容,重新来过。)
Aggregation 我们写的组件,将来是否允许被别人聚合使用。Only 表示必须被聚合才能使用,有点类似 C++ 中的纯虚类,你要是总工程师,只负责设计但不亲自写代码的话,才选择它。
Support ISupportErrorInfo 是否支持丰富信息的错误处理接口。以后就讲。
Support Connection Points 是否支持连接点接口(事件、回调)。以后就讲。
Free Threaded Marshaler 以后也不讲,就算打死你,我也不说!
四、添加接口函数
图五、调出增加接口方法的菜单
图六、增加接口函数 Add
相关文章
上一篇文章:用NoahWeb表现层制作动态网站 - 第一天
下一篇文章:ADO数据访问模型初学者入门
- 推荐阅讯
- Delphi面向对象的编程方法(五)
- Delphi快速入门(五)
- Delphi快速入门(一)
- Delphi字符串列表及应用(二)
- Visual FoxPro9.0中设计与使用查询
- 传道解惑 软件开发技术名词解密
- 破解高手常用的破解工具介绍
- Ajax在.NET中与Server控件的交互
- 将视频演示作为应用程序的启动封面
- NoahWeb应用——模组资源
- 阅读排行
- 1.全面剖析Delphi 2006新增特性
- 2.用Delphi开发视频聊天软件
- 3.用Win32 API枚举应用程序窗口和进程
- 4.软件的架构与设计模式之什么是架构
- 5.软件的架构与设计模式之模式的种类
- 6.Delphi中为TreeView添加单选和复选框
- 7.用Delphi实现24位真彩色图标
- 8.VS.NET2005 Beta2初体验之感受2005
- 9.程序界面设计模式慨述
- 10.没落的奇迹 谁会买下Delphi?
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
