首页 com程序编写入门

com程序编写入门

举报
开通vip

com程序编写入门com程序编写入门 COM程序编写入门(全文-1) COM程序编写入门 名词解释: OLE: (Object linking and embedding对象的链接与嵌入) 使得服务器模块和客户模块通过标准的接口进行通讯。两个模块可以在同一台计算机或位于不同的计算机上,位置对用户来说是无关紧要的。服务器模块实现了一组接口,客户模块通过这组接口进行通讯。 COM: (Component object modal组件对象模型) 实现了OLE的功能,具体可完成一下功能: l 编写供多种语言使用的代码; 多...

com程序编写入门
com程序编写入门 COM程序编写入门(全文-1) COM程序编写入门 名词解释: 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,选择File\New\Others,选择DLL Wizard自动创建一个DLL工程,选择 Unit新建一个单元,全部保存。 File\New\ 写代码: 在新建的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; interface uses 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.Te xt))); v_Obj.Free; end; end. 升华到理论: l D L L中定义的对象只能引出抽象方法。当建立对象时, D L L向应用程序返回虚拟方法的指针 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 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。 -------------------------------------------------------------------------------- -------------- COM程序编写入门(全文-2) COM的理论 以实例来讲 COM的接口(Interface)是COM的核心,所有的COM接口都是通过IUnknown派生出来的,它告知客户那些接口是有效的,即已经被实现类说定义。它定义的一般方式如下: ISimpleInterface=Interface(IUnknown) Function GetName:String Procedure SetName(v_Name:String) End; 如果在上面的接口中加入这样一行: ISimpleInterface=Interface(IUnknown) V_Name:String; Function GetName:String Procedure SetName(v_Name:String) End; 这样是不被允许的,因为上面我们说到接口方法就像是一个占位符,需要实现类引出才有实际意义,v_Name:String这一句只是一个数据成员将永远无任何意义,如果要定义也只能在实现类中定义。 现在举一个COM的例子,没有什么实际用处但至少说明问题: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; Edit1: TEdit; Button1: TButton; Button2: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; ISimpleInterface=Interface(IUnknown) Procedure SetValue(v_Value:Integer); Function GetValue:Integer; End; TSimpleImple=Class(TInterfacedObject,ISimpleInterface) Public Value:Integer; Procedure SetValue(v_Value:Integer); Function GetValue:Integer; End; var Form1: TForm1; v_Obj:TSimpleImple; implementation {$R *.dfm} { TSimpleImple } function TSimpleImple.GetValue: Integer; begin Result:=Value; end; procedure TSimpleImple.SetValue(v_Value: Integer); begin Value:=v_Value; end; procedure TForm1.FormCreate(Sender: TObject); begin v_Obj:=TSimpleImple.Create; end; procedure TForm1.Button1Click(Sender: TObject); begin v_Obj.SetValue(StrToInt(Edit1.Text)); Edit1.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin Edit1.Text:=IntToStr(v_Obj.GetValue); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin v_Obj.Free; end; end. 蓝色字样即定义了一个接口,在形式上在ISimpleInterface(接口定义)和TSimpleImple(实现类)几乎定义都差不多,但是我要强调的是,接口定义是为了实现OLE方式的访问,而实现类的定义,是接口功能的实现。两者在功能和实现上都是有区别的 -------------------------------------------------------------------------------- -------------- COM程序编写入门(全文-3) 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。 文 - 汉语汉字 编辑词条 文,wen,从玄从爻。天地万物的信息产生出来的现象、纹路、轨迹,描绘出了阴阳二气在事物中的运行轨迹和原理。 故文即为符。上古之时,符文一体。 古者伏羲氏之王天下也,始画八卦,造书契,以代结绳(爻)之政,由是文籍生焉。--《尚书序》 依类象形,故谓之文。其后形声相益,即谓之字。--《说文》序》 仓颉造书,形立谓之文,声具谓之字。--《古今通论》 (1) 象形。甲骨文此字象纹理纵横交错形。"文"是汉字的一个部首。本义:花纹;纹理。 (2) 同本义 [figure;veins] 文,英语念为:text、article等,从字面意思上就可以理解为文章、文字,与古今中外的各个文学著作中出现的各种文字字形密不可分。古有甲骨文、金文、小篆等,今有宋体、楷体等,都在这一方面突出了"文"的重要性。古今中外,人们对于"文"都有自己不同的认知,从大的方面来讲,它可以用于表示一个民族的文化历史,从小的方面来说它可用于用于表示单独的一个"文"字,可用于表示一段话,也可用于人物的姓氏。 折叠编辑本段基本字义 1(事物错综所造成的纹理或形象:灿若,锦。 2.刺画花纹:,身。 3(记录语言的符号:,字。,盲。以,害辞。 4(用文字记下来以及与之有关的:,凭。,艺。,体。,典。,苑。,献(指有历史价值和参考价值的图书资料)。,采(a(文辞、文艺方面的才华;b(错杂艳丽的色彩)。 5(人类劳动成果的总结:,化。,物。 6(自然界的某些现象:天,。水,。 7(旧时指礼节仪式:虚,。繁,缛节(过多的礼节仪式)。 8(文华辞采,与“质”、“情”相对:,质彬彬。 9(温和:,火。,静。,雅。 10(指非军事的:,职。,治武功(指礼乐教化和军事功绩)。 11(指以古汉语为基础的书面语:552,言。,白间杂。 12(专指社会科学:,科。 13(掩饰:,过饰非。 14(量词,指旧时小铜钱:一,不名。 15(姓。 16( 皇帝谥号,经纬天地曰文;道德博闻曰文;慈惠爱民曰文;愍民惠礼曰文;赐民爵位曰文;勤学好问曰文;博闻多见曰文;忠信接礼曰文;能定典礼曰文;经邦定誉曰文;敏而好学曰文;施而中礼曰文;修德来远曰文;刚柔相济曰文;修治班制曰文;德美才秀曰文;万邦为宪、帝德运广曰文;坚强不暴曰文;徽柔懿恭曰文;圣谟丕显曰文;化成天下曰文;纯穆不已曰文;克嗣徽音曰文;敬直慈惠曰文;与贤同升曰文;绍修圣绪曰文;声教四讫曰文。如汉文帝。 折叠编辑本段字源字形 字源演变与字形比较 折叠编辑本段详细字义 〈名〉 1(右图是 “文”字的甲骨文图片,资料来源:徐无闻主编:《甲金篆隶大字典》,四川辞书出版社。1991年7月第一版。 “文”字的甲骨文字绘画的像一个正面的“大人”,寓意“大象有形”、“象形”;特别放大了胸部,并在胸部画了“心”,含义是“外界客体在心里面的整体影像、整体写真、整体素描、整体速写”。 许慎《说文解字》把“文”解释为“错画也”,意思是“对事物形象进行整体素描,笔画交错,相联相络,不可解构”,这与他说的独体为文、合体为字的话的意思是一致的。“说文解字”这个书名就表示了“文”只能“说”,而“字”则可“解”的意思。“文”是客观事物外在形象的速写,是人类进一步了解事物内在性质的基础,所以它是“字”的父母,“字”是“文” 的孩子。“文”生“字”举例(以“哲”为例):先对人手摩画,其文为“手”;又对斧子摩画,其文为“斤”。以手、斤为父母,结合、生子,其子就是“折”(手和斤各代表父母的基因)。这个“折”就是许慎所谓的“字”。“字”从宀从子,“宀”表示“独立的房子”,子在其中,有“自立门户”的意思。故“字”还能与“文”或其他“字”结合,生出新“字”来。在本例,作为字的“折”与作为文的“口”结合,就生出了新的字“哲”。 2( 同本义 [figure;veins] 文,错画也。象交文。今字作纹。——东汉?许慎《说文》 五章以奉五色。——春秋?左丘明《左传?昭公二十五年》。注:“青与赤谓之文,赤与白谓之章,白与黑谓之黼,黑与青谓之黻。” 美于黼黼文章。——《荀子?非相》 茵席雕文。——《韩非子?十过》 织文鸟章,白旆央央。——《诗?小雅?六月》 斑文小鱼。——明? 刘基《诚意伯刘文成公文集》 3(又如:文驾(彩车);文斑(杂色的斑纹);文旆(有文彩的旗帜);文绣(绣有彩色花纹的丝织品;刺花图案);文织(有彩色花纹的丝织品);文鳞(鱼鳞形花纹)。 4(字,文字(“文”,在先秦时期就有文字的意思,“字”,到了秦朝才有此意。分别讲,“文”指独体字;“字”指合体字。笼统地说,都泛指文字。) [character] 饰以篆文。——南朝宋?范晔《后汉书?张衡传》 分文析字。——东汉?班固《汉书?刘歆传》 夫文,止戈为武。——《左传?宣公十二年》 距洞数百步,有碑仆道,其文漫灭。——王安石《游褒禅山记》 文曰“天启壬戌秋日”。——明? 魏学洢《核舟记》 文曰“初平山尺”。 5(又如:甲骨文;金文;汉文;英文;文迹(文字所记载的事迹);文书爻(有关文字、文凭之类的卦象);文异(文字相异);文轨(文字和车轨);文狱(文字狱);文钱(钱。因钱有文字,故称);文状(字据,军令状);文引(通行证;路凭);文定(定婚)。 6(文章(遣造的词句叫做“文”,结构段落叫做 “章”。) [literary composition] 故说诗者不以文害辞。——《孟子?万章上》 好古文。——唐? 韩愈《师说》 属予作文以记之。——宋? 范仲淹《岳阳楼记》 能述以文。——宋? 欧阳修《醉翁亭记》 摘其诗文。——清? 纪昀《阅微草堂笔记》 7(又如:文价(文章的声誉);文魔(书呆子);文会(旧时读书人为了准备应试,在一起写文章、互相观摩的集会);文移(旧时官府文书的代称);文雄(擅长写文章的大作家);文意(文章的旨趣);文义(文章的义理);文情(文章的词句和情思);本文(所指的这篇文章);作文(写文章;学习练习所写的文章);文魁(文章魁首);文价(文章的声价);文什(文章与诗篇)。 8(美德;文德 [virtue] 圣云继之神,神乃用文治。——杜牧《感怀诗一首》 9(又如:文丈(对才高德韶的老者的敬称);文母(文德之母);文武(文德与武功);文命(文德教命);文惠(文德恩惠);文德(写文章的道德);文薄(谓文德浅薄);文昭(文德昭著)。 10.文才;才华。亦谓有文才,有才华 [literary talent] 而文采不表于后世也。——汉? 司马迁《报任安书》 11(又如:文业(才学);文英(文才出众的人);文采风流(横溢的才华与潇洒的风度);文郎(有才华的青少年);文彦(有文才德行的人);文通残锦(比喻剩下不多的才华)。 12(文献,经典;韵文 [document;classics;verse] 儒以文乱法。——《韩非子?五蠹》 言必遵修旧文而不穿凿。——《说文解字?叙》 13(辞词句。亦指文字记载 [writings;record]。如:文几(旧时书信中开头常用的套语。意为将书信呈献于几前);文倒(文句颠倒);文过其实(文辞浮夸,不切实际);文义(文辞);文辞(言词动听的辞令);文绣(辞藻华丽)。 14(自然界的某些现象 [natural phenomenon] 经纬天地曰文。——《左传?昭公二十八年》 15(又如:天文;地文;水文;文象(日月星辰变化的迹象);文曜(指日月星辰;文星);文昌(星座名)。 16(文治;文事;文职。与“武”相对。 [achievements in culture and education;civilian post] 文能取胜。——《史记?平原君虞卿列传》 文不能取胜。 文武并用。——唐? 魏征《谏太宗十思疏》 精神折冲于千里,文武为宪于万邦。――明《袁可立晋秩兵部右侍郎诰》 17(又如:文臣,文吏(文职官吏);文席(教书先生的几席);文品(文官的品阶);文帅(文职官员出任或兼领统帅);文烈(文治显赫);文员(文职吏员);文阶(文职官阶);文道(文治之道);文业(文事);文僚(文职官吏)。 18(法令条文 [articles of decree] 而刀笔吏专深文巧诋,陷人于罪。——《史记?汲黯列传》 19(又如:文劾(根据律令弹劾);文法吏(通晓法令、执法严峻的官吏);文丈(规矩;制度);文移(官府文书);文牓(布告;文告);文宪(礼法;法制)。 20(文言。古代散文文体之一;别于白话的古汉语书面语 [literary language]。如:半文半白;文语;文白(文言文和白话文)。 21(文教;礼节仪式 [rites] 则修文德。——《论语?季氏》 22(又如:文丈(崇尚礼文仪节);文俗(拘守礼法而安于习俗);文致(指礼乐);文貌(礼文仪节);文绪(文教礼乐之事);文仪(礼节仪式) 23(指表现形式;外表 [form;appearance]。如:文服(表面服从);文榜(告示、布告之类);文诰(诰令) 24(指鼓乐,泛指曲调 [music;tune]。如:文曲(指乐曲);文始(舞乐名) 25(谥号,谥法:勤学好问叫文 [study deligently] 何以谓之文。——《论语》 是以谓之文。 26(姓 〈动〉 1(在肌肤上刺画花纹或图案 [tatto (the skin)] 被发文身。——《礼记?王制》。注:“谓其肌,以丹青涅之。” 文绣有恒。——《礼记?月令》 2(又如:文笔匠(在人身上刺花的艺人);文身断发(古代荆楚、南越一带的习俗。身刺花纹,截短头发,以为可避水中蛟龙的伤害。后常以指落后地区的民俗);文木(刻镂以文采之木) 3(修饰;文饰 [cover up] 身将隐,焉用文之?——《左传?僖公二十三年》 饰邪说,文奸言,以枭乱天下。——《荀子?非十二子》 4(又如:文过饰非;文致(粉饰;掩饰);文冢(埋葬文稿之处) 5(装饰 [decorate] 舍其文轩。——《墨子?公输》 此犹文奸。 文车二驷。——明? 归有光《项脊轩志》 文马四百匹。——《史记?宋世家》 若将比予文木邪。——《庄子?人间世》 6(又如:文巧(文饰巧辩);文竿(以翠羽为饰之竿);文舫(装饰华丽的游艇);文饰(彩饰);文榭(饰以彩画的台榭);文舟,文艘(装饰华丽的船);文剑(装饰华丽的剑);文舆(饰以彩绘的车) 7(撰写文章 [write]。如:文匠(写文章的大家);文祸(因写文章而招来的灾祸);文雄,文 杰(指文豪) 〈形〉 1(有文采,华丽。与“质”或“野”相对 [magnificent;gorgeous] 其旨远,其辞文。——《易?系辞下》 晋公子广而俭,文而有礼。——《左传?僖公二十三年》 2(又如:文巧(华丽奇巧);文朴(文华与质朴);文服(华美的衣服);文砌(华美的石阶);文背(不文雅,粗俗);文轩(华美的车子);文质(文华与质朴) 3.柔和,不猛烈 [mild;gentle]。如:文烈(指火候温猛) 4(美,善 [fine;good]。如:文徽(华美);文鸳(即鸳鸯。以其羽毛华美,故称);文衣(华美的服装) 5(通“紊”。紊乱的 [disordered] 惇宗将礼,称秩元祀,咸秩无文。——《书?洛诰》 天子祭天下名山大川,怀柔百神,咸秩无文。——《汉书?郊祀志上》 王者报功,以次秩之,无有文也。——庆劭《风俗通义?山泽》 〈量〉 1(用于旧时的铜钱。如:一文钱 2(用于计算纺织物 五扶为一首,五首成一文。——《后汉书》
本文档为【com程序编写入门】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_314871
暂无简介~
格式:doc
大小:43KB
软件:Word
页数:0
分类:
上传时间:2017-09-26
浏览量:13