Delphi 中 COM 实现研究手记

Delphi 中 COM 实现研究手记

ID:37916303

大小:57.00 KB

页数:9页

时间:2019-06-02

Delphi 中 COM 实现研究手记_第1页
Delphi 中 COM 实现研究手记_第2页
Delphi 中 COM 实现研究手记_第3页
Delphi 中 COM 实现研究手记_第4页
Delphi 中 COM 实现研究手记_第5页
资源描述:

《Delphi 中 COM 实现研究手记》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Delphi中COM实现研究手记前言   前些日子用Delphi写了一个Windows外壳扩展程序,大家知道Windows外壳扩展实际上就是COM的一种应用--ShellCOM,虽然整个程序写得还算比较顺利,但写完后还是感觉对Delphi中COM的实现有点雾里看花的感觉,因此我认为有必要花一点时间对COM在Delphi中的实现做一些研究。另外我也买了李维的新书--《深入核心--VCL架构剖析》,里面有两章涉及了与COM相关内容,看完后我知道了COM在Delphi中的实现是基于接口(Interface),而De

2、lphi中的接口概念又起源于对COM的支持,总之他们之间互相影响,发展成接口在Delphi中已经是First-Class的地位,并且完全摆脱COM而独立存在。   本系列文章侧重于描述COM在Delphi中的实现手法,主要配合VCL源码片断进行分析,不会涉及过多的基本概念,因此要求读者有一定的COM和接口概念,可以参考我在文章末尾列出的文献。本篇主要讲COM对象在Delphi中的创建过程。正文  为了让读者能跟着我的分析轻松读完本篇文章,我引用文献[2]中的范例做解释,但为了更清楚地阐述问题,我改写了部分代码

3、。所有分析请在Delphi7上测试。Demo源码这里下载。  在Delphi中首先通过选择菜单File-->New-->Other...新建一个ActiveXLibrary并保存名称为SimpleComServer,再新建一个COMObject,在COMObjectWizard中将对象命名为SimpleCOMObject,Options中的两个复选框都可以不必选中其他的保持默认,现在COM服务器端的框架已经建立起来了。剩下的就是需要我们把声明的接口ISimpleCOMObject的代码实现,其他的读者自己看源

4、码吧,很简单。服务器端代码librarySimpleComServer;uses ComServ, SimpleCOMObjectin'SimpleCOMObject.pas', SimpleComInterfacein'SimpleComInterface.pas',exports DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer;{$R*.RES}beginend.unitSimpleComInterfac

5、e;interfaceusesWindows;const Class_SimpleComObject:TGUID='{3714CF21-D272-11D3-947F-0050DA73BE5D}';type ISimpleComObject=interface   ['{2E2A6DD0-D282-11D3-947F-0050DA73BE5D}']   functionMultiply(X,Y:Integer):Integer;stdcall;   functionGetClassName:Widestring

6、;stdcall; end;implementationendunitSimpleCOMObject;interface//SimpleCOMObject的实现部分uses Windows,ActiveX,Classes,ComObj,SimpleComInterface;type TSimpleComObject=class(TComObject,ISimpleComObject) protected   functionMultiply(X,Y:Integer):Integer;stdcall;   fu

7、nctionGetClassName:Widestring;stdcall; end;const Class_SimpleComObject:TGUID='{3714CF21-D272-11D3-947F-0050DA73BE5D}';implementationusesComServ;{TSimpleComObject}functionTSimpleComObject.GetClassName:Widestring;begin Result:=TSimpleComObject.ClassName;end;f

8、unctionTSimpleComObject.Multiply(X,Y:Integer):Integer;begin Result:=X*Y;end;initialization TComObjectFactory.Create(ComServer,TSimpleComObject,Class_SimpleComObject,   'SimpleComObject','Asimpleimpleme

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。