庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>Delphi语言>实例分析>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

COM程序编写入门(三)

 作者:本站收集   日期:2005-3-14
字号选择〖 〗/ 双击滚屏 单击停止   
COM对象的生存周期与IUnknown接口
COM对象的生存周期分为两部分来讲:客户端与COM本身:

在客户端,视定义的COM对象接口而定,像我们例子中的v_Obj,定义成全局变量,那么COM对象在创建时产生,只有在程序退出时才被释放。我们也可以在形式上将其释放,如:v_Obj:=nil,这样这个COM接口就无效了。

在COM本身,COM接口的通过记数的方式来完成COM的生存周期,为什么采用记数,当然很简单——因为COM可能同时被多个程序所调用。有一个程序连接到COM时计数器加1,某个释放时计数器减1,当计数器为0时,COM对象才真正从内存中移除。

IUnknown接口:

为什么将IUnknown接口与生存周期放在一起讲是有原因的,COM生存周期中的计数器就定义在IUnknown接口中:AddRef、Release、QueryInterface。这三个接口也是IUnknown的全部身家。对三个接口还是解释一下:

AddRef:当COM产生一个客户端连接的时候,AddRef方法负责将计数器加1;

Release:当COM释放一个客户端连接的时候,Release方法负责将计数器减1,如果计数器为0,释放COM;

QueryInterface:因COM支持多个接口,QueryInterface负责找出用户指定的接口以返回正确的VTable;

接口全局标识:

上面说到QueryInterface的时候,提到了要找到正确的接口。其实正确的接口就是靠全局标识符来识别的。它是一个128位的数字,是按照统计学的方法,计算出来的,可唯一标识出每个接口(理论上)。具体实现我们不用管,它产生的方法很简单,在Delphi中按Ctrl+Shift+G就可以产生一个。

COM实现在Delphi中的实现
相信通过上面的介绍对COM应该也有了初步的认识了,现在就将点实际的东西,如何在Delphi下编写COM。

在Delphi下面开发COM是比较容易的,Delphi封装的COM开发的最基本的要素,只要你去编写对象的实现类就行了,其他的全有Delphi搞定。

1、打开Delphi,选择File\New\Others,选择Active页的ActiveX Library,选择File\New\Others,选择Active页的COM Object,出现的向导中比较重要的选项如下:

Class Name:实现类的名称,自定。

Include Type Library:是否包含类型库文件,如果不选择,Delphi将不产生类型库文件,应此上面输入的Class Name也无效。也就意味着接口类、实现类、实现方法都的自己写。对于不是很熟悉COM的的人员最好不要采用这种方式。

其它参数均可采用默认值,具体意义可参见有关资料。

2、接口的编写

选择View\Type Library,选择接口,右键New选择Method,在右边Attributes的Name中输入接口的名称,在Parameters中加入需要加入的输入和输出参数。注意:设置参数类型时,如果是返回参数的,参数类型后面要加上“*”。点击刷新,在程序单元中就出现了刚定义的接口,在此编写实现代码就可以了。

3、COM的安装

编写完成后编译,通过Run\Register ActiveX Server注册编译好的COM,通过Run\Install COM+ Objects安装COM组件,在弹出的对话框中选择接口,在接下来的对话框中可以选择安装到已有的COM应用程序中也可以安装到新的COM应用程序中。这样就完成了COM的安装,你可以打开系统中的组件服务看到你所安装的COM。

由于工作繁忙,没能更加详细的将个人的心得详细描述出来,本人会陆续发表自己的心得与大家分享。朋友们有兴趣的可以和我联系;

QQ:103222465

Email:Jackielee1979@163.COM

上一篇:Delphi使用VB6编写的ActiveX控件???    下一篇:COM程序编写入门(二)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-3-14
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿