COM程序编写入门(全文-3)

原创 2004年06月13日 16:08:00

COM对象的生存周期与IUnknown接口

COM对象的生存周期分为两部分来讲:客户端与COM本身:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

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

IUnknown接口:

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

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

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

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

接口全局标识:

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

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,在右边AttributesName中输入接口的名称,在Parameters中加入需要加入的输入和输出参数。注意:设置参数类型时,如果是返回参数的,参数类型后面要加上“*”。点击刷新,在程序单元中就出现了刚定义的接口,在此编写实现代码就可以了。

3、COM的安装

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

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

QQ103222465

EmailJackielee1979@163.COM

COM程序编写入门(全文-3)

对象的生存周期与IUnknown接口COM对象的生存周期分为两部分来讲:客户端与COM本身:在客户端,视定义的COM对象接口而定,像我们例子中的v_Obj,定义成全局变量,那么COM对象在创建时产生,...
  • Tercel99
  • Tercel99
  • 2007年02月27日 23:44
  • 1225

COM程序编写入门(全文-1)

名词解释:OLE: (Object linking and embedding对象的链接与嵌入)使得服务器模块和客户模块通过标准的接口进行通讯。两个模块可以在同一台计算机或位于不同的计算机上,位置对用...
  • Tercel99
  • Tercel99
  • 2007年02月27日 21:26
  • 1314

COM程序编写入门(全文-2)

 以实例来讲COM的接口(Interface)是COM的核心,所有的COM接口都是通过IUnknown派生出来的,它告知客户那些接口是有效的,即已经被实现类说定义。它定义的一般方式如下:ISimple...
  • Tercel99
  • Tercel99
  • 2007年02月27日 22:42
  • 909

ATL入门:利用ATL编写简单的COM组件

序论       第一步:运行ATL COM Wizard         运行Visual C++ 并创建一个新的工程,选择“ATL COM AppWizard”,项目名称为”Simple_ATL”...
  • zhwang_1999
  • zhwang_1999
  • 2008年03月26日 23:35
  • 5809

COM组件入门(一)

最近需要用到COM组件的知识,看了看COM编程指南,感觉还不错,把我的学习心得记录下来。这是我写...
  • davidsu33
  • davidsu33
  • 2014年08月13日 17:08
  • 1276

COM入门第一部分 - 什么是COM和如何使用COM

(本文于2007年11月5日进行过编辑,修正若干用词不当的问题)COM入门第一部分 - 什么是COM和如何使用COM作者:Michael Dunn译者:蒋国纲 本文目的 此文为刚开始学习COM并需要一...
  • guogangj
  • guogangj
  • 2006年10月30日 20:39
  • 7970

《黑客攻防入门秘籍》学习笔记 (4)

windows漏洞原因: 1 人为因素:技术缺陷,故意留下后门 ,bianyu
  • li758568825
  • li758568825
  • 2014年07月15日 00:58
  • 570

Python3.6 20个入门级小程序(三)

Python3.6 20个小程序入门(三) 需求:将(第二题中)生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 分析:第二题中使用uuid生成了128位的唯一编码,但是...
  • smallcolzacio
  • smallcolzacio
  • 2017年10月23日 12:31
  • 226

“全文”和“收起”实现

朋友圈列表的点击“全文”展开、点击“收起”折叠,实现起来很简单,主要是以下两步: 获取item文本的行数记录item文本的状态 1.获取文本的行数 很容易想到获取文本的行数,超出规定行数便折叠文本,...
  • qq_35224673
  • qq_35224673
  • 2016年08月11日 11:02
  • 935

[学习Cython编程]Cython编程入门

本文主要以[Learning Cython Programming]一书中的案列和我们自己编写的简单程序来学习Cython。 一:Python调用C函数 mycode.c文件 #include ...
  • yueguanghaidao
  • yueguanghaidao
  • 2014年04月02日 01:11
  • 2762
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:COM程序编写入门(全文-3)
举报原因:
原因补充:

(最多只允许输入30个字)