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

2016-02-19 12:37 7 1 收藏

下面图老师小编要向大家介绍下COM程序编写入门(全文-1),看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - 编程语言 】

COM程序编写入门编写:李贤敏日期:2004-5-2名词解释:OLE: (Object linking and embedding对象的链接与嵌入)      使得服务器模块和客户模块通过标准的接口进行通讯。两个模块可以在同一台计算机或位于不同的计算机上,位置对用户来说是无关紧要的。服务器模块实现了一组接口,客户模块通过这组接口进行通讯。COM: (Component object modal组件对象模型)       实现了OLE的功能,具体可完成一下功能:l        编写供多种语言使用的代码;多种语言:指的是建立好的COM组件不在乎访问它的编程语言,任何一种编程语言只要知道COM组件的接口,访问是都能完成同样的功能。l        创建ActiveX控件;l        通过OLE Automation操纵其他应用程序;如:Microsoft Excel的OLE编程接口,创建对象后,任何一种程序都可以实现对Excel的操作。l        与其他计算机上的应用程序通讯;实际为COM接口与接口之间的通讯,因其实现了不同语言、不同计算机的方式,所以实现不同计算机上应用程序的通讯也就十分容易。COM模块:COM的模块指独立的应用程序(EXE)或者动态连接库(DLL),在实现COM时,采用DLL方式要比较容易一些。因为:应用程序在加载时在内存中都是独立的地址控件,而DLL加载后可以驻留内存。当多个客户端调用COM时,如果采用EXE形式,就会有多个EXE被加载,而且COM处理客户端的访问时,也必须在不同的地址空间来回切换,大费周张。而DLL形式永远只有一个驻留内存,COM只要在相同的内存空间中寻找执行代码即可。逐步深入:DLL我们都已经写了很多,通常我们写的DLL都是定义的一些方法或是过程来实现特定的操作,当然定义的出口(Exports)也就是这些方法或是过程。现在我们来写一个出口为一个类的DLL来展开我们COM编写的学习。准备工作:打开Delphi,选择FileNewOthers,选择DLL Wizard自动创建一个DLL工程,选择FileNewUnit新建一个单元,全部保存。写代码:在新建的Unit中定义一个抽象类:Type  TCalculator=Class    Public      Function Addition (Op1, Op2: Double): Double ; virtual; abstract;  End;这个类很简单,就定义了一个抽象方法实现两个数的相加。定义抽象类后,定义一个类来实现这个抽象类:Type  TCalcImple=Class (TCalculator)  Public    Function Addition (Op1, Op2: Double): Double; Override;  End;方法实现:Function TCalcImple.Addition(Op1, Op2: Double): Double;Begin  Result: =Op1+Op2;End;当然我们还差一个创建这个类的方法,我们在加入如下:Function CreateCalcImple:TCalcImple;stdcall;Begin  Result:=TCalcImple.Create;End;定义出口:Exports CreateCalcImple;这样我们这个DLL的编写就完成了,我问再来写一个Exe程序来调用它。具体在此就不再操作以便,一些列出Exe的源代码:unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;{定义与DLL中定义的抽象类一样的类,类名称可以自定}Type  TCalculator=Class  Public    Function Addition(Op1,Op2:Double):Double;virtual;abstract;  End;type  TForm1 = class (TForm)    Button1: TButton;    Edit1: TEdit;    Edit2: TEdit;    Edit3: TEdit;    Label1: TLabel;    Label2: TLabel;    Label3: TLabel;    procedure Button1Click(Sender: TObject);  private    { Private declarations }  public    { Public declarations }    v_Obj:TCalculator;  end;{静态调用DLL,注意返回类型与DLL中的不同,为抽象类的名称必须与DLL中的一致}  Function CreateCalcImple:TCalculator;stdcall;External 'ComDLL.dll';var  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin  v_Obj:=CreateCalcImple;  Edit3.Text:=FloatToStr(v_Obj.Addition(StrToFloat(Edit1.Text),StrToFloat(Edit2.Text)));  v_Obj.Free;end; end.升华到理论:l        D L L中定义的对象只能引出抽象方法。当建立对象时, D L L向应用程序返回虚拟方法的指针表VTable。l        在定义抽象类的时候,定义的方法为:Function Addition(Op1,Op2:Double):Double;virtual;abstract;后面加上abstract(抽象方法表示)的原因是因为只有抽象方法才能被引出。l        在执行文件中,通过DLL的出口实际只创建了一个接口,但是可以像使用对象一样来调用其方法,这就有点开始尽是于COM了。 有上面几点引出:1、COM的接口可以看成一个占位符,具体的实现是在接口对应的类中;就像我们定义的抽象类(TCalculator)中的Addition方法,只是一个没有任何意义的描述符,但通过实现类(TCalcImple)中引出后便有了具体的意义;2、COM接口的访问必须通过其接口类进入后才能够访问。就如我们例子中加入CreateCalcImple方法一样,只有建立这个接口类(Interface)后才可以访问具体的接口。3、也就是说,一个COM必须具备三个方面的元素:接口定义类、接口实现类、接口创建类。只要具备了这三个方面的元素就可以实现COM。 (待续…)

来源:http://www.tulaoshi.com/n/20160219/1601318.html

延伸阅读
Com接口入门细详(一) 接口的出现更递了c++的多重的继承,在应用中相当重要一部分,然而接口中最主要的一块又是com接口(微软提供的接口标准),接口只是服务声明,而在一定形式并没有实现类方法。 下面是一段简单的代码让我们来看一下。 unit Unit1; interface uses   Windows, Messag...
标签: SQLServer
  基本知识 1. SQL Server7 的 DeskTop 版中没有全文本检索。 2. 一个表只能有一个全文本检索。 3. 被检索的表必须有单列的唯一索引。 4. 全文本的索引存储在文件系统中,而非数据库中。 5. 更新全文本索引的过程比常规索引要耗时,而且也不象常规索引那样可以由数据库系统立即更新。 6. 全文本索引包含在全文本目录( Full-Text Catalog )...
标签: PHP
               搞完了PHP4调用JavaBean,又想去试试调用COM,开始以为很难,自己用VB6写了一个Active Dll在PHP4中调用,马上成功,比调用javabean方便多了,下面讲一下我的步骤。      下载的版本是从http://www.mm4.de/。     &nbs...
使用 MFC 编写打印程序 作者:戎亚新 南京航空航天大学仿真与控制实验室 下载源代码 摘要 本文首先介绍了利用MFC提供的文档视图框架来实现一个打印程序,实现打印预览,在此基础上,同时通过对MFC源代码的深入探讨,提出了利用该方法在对话框上用MFC实现打印功能,结果表明,利用MFC实现打...
新的JavaTM 虚拟机(VMs)具有能够提高性能的特点, 并且你可以使用许多工具来提高应用程序的性能或减小一般类文件的尺寸。这种Java虚拟机的特性和工具可使你在不改变应用程序、或对应用程序仅做很小改动的情况下, 提高应用程序的性能。 Java虚拟机的特性 !-- frame contents -- !-- /frame contents -- Ja...

经验教程

223

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部