Delphi(程序人生)

Delphi Programer DoubleCat

导航

从Interface到COM+(Part Two)

 

 

InterfaceCOM+(Part Two)

 

,COM是什么东西?COM是做什么用的?COM怎么用?

1,COM=Component Object Model(组件对象模型),当你用delphi做了一个功能强大,操作简单的软件模块(或计算复杂的方法),在你要与用C++或其它语言开发工具的人协作时,你需要把你的这个模块里的功能提供给他们使用,在这种情况下,你有二种选择,要么,你把这个模块封装成DLL,调他们调用,要么你把这个模块封装成COM,安装到Windows操作系统里,供它们调用

 

2,站在更大的应用软件系统角度,你的这个模块是组成大型应用软件中重要的组成部份,于是你的这个封装了的模块叫作软件组件,站在你开发的这个模块角度而言,你的这个模块又是能独立完成大型应用软件中特定功能的小软件,于是你的这个封装了的模块就叫组件软件(可以组装到更大型的应用软件系统中).用面象对象的叫法就叫组件对象(CO)Model的意思是模型,就是可以把你的这个模块安装到Windows操作平台中,对外提供你的模块功能.

 

3,如何创建一个COM?File->New->Other-ActivX->ActiveX Library,这样的创建,实质上是创建了一个DLL,不过这个DLL有点特殊,它可以安装到Windows操作平中,把所有功能对外提供服务.

 

4,说说COMServCOMObjectCOMObjectFactory类这三个类是COM服务的核心类,COMServer的功能是把COMObject这个对象向外提供服务,当一个COMServer要服务很多个COMObject,就要用到ComObjectFactory(COM对象工厂)来管理众多的COMObject,一个DLL要通过WindowsCOM机制对外提供服务,就必须引用COMServer(ComServCOMServer的缩写)

 

5,注册一个COM DLL在同一目录中用 Regsvr32 DLL文件名,取消注册用Regsvr32/u DLL文件名

 

6,COMWindows操作平台对外提供自定义组件对象服务的机制,所以编写COM DLL就得尊守这个机制的规定.为了方便用户定义一个COM服务,Delphi制作了一个类库编辑器(类库的=把类存入库中要用类中的功能就从库中取,如动态链接库)

7,如何创建一个COM?

One:File->New->Other->ActiveX Library这时他会生成一个DLL形式的DPR文件,一个ridl(类库设计器)文件,一个与类库设计器相自动关联的_TLB.pas文件.DPR文件会自动与_TLB.pas文件关联(引用),同时会自动建立一个COMDispatch(调度)接口,自建的接口全部归属于这个总调度接口,一个COM中只能一个调度接口,他管理并发布COM中所有接口的功能.到这个时候,仅仅只定义了一个空COM(什么也不做的COM),注意:在这个时候不要去增接口与实现

Two:为了让这个COM加上功能,我们还在创建一个COM对像File->New->Other->ActiveX->COM Object,这时写放接口实现类的类名称系统会自动定上接口的名称,去掉包含类库选项,去掉建立OLE接口自动化.建立好后,就可以在接口中增加方法,刷新所有代码自动实现.

8,如何调用一个COM?

 Component->ImportComponent->Import A Type Library选择已注册了的DLL,然后DELPHI会根据这个COM DLL 自动生成一个类库,然后查看这个类库

Var

 接口变量 : 接口

 Begin

接口变量 := CreateComObject(CLASS_接口实现类名称) as 接口

然后就直接叫用接口中的方法

9,说说工程文件(DPR)与_TLIB.Pas(类库文件)及实现单元.pas文件的结构关系

DPR文件是DLL形式的文件,引用ComServ单元,标明这个DLL是个COM服务文件

如下这四个导出方法: 是用于获取类对像,注册与注销用的,工程文件必须引用类库文件和接口实现文件,文件在use内的引用是用in语句.代码如下

library Project1;

uses

 ComServ,

 Project1_TLB in 'Project1_TLB.pas',//单元文件标识符 in “文件图径+文件全名”

 Unit1 in 'Unit1.pas' {Adder: CoClass};

exports

 DllGetClassObject,

 DllCanUnloadNow,

 DllRegisterServer,

 DllUnregisterServer;

{$R *.RES}

begin

end.

类库单元定义的是接口的信息及接口的创建初使化工作,接口实现单元要引用类库单元,目的是为了去实现类库单元内所定义的接口.而类库单元文件不引用接口实现单元.

 

posted on 2011-03-29 15:53  DoubleCat  阅读(280)  评论(0编辑  收藏  举报