房
房客
Unregistered / Unconfirmed
GUEST, unregistred user!
图片版请访问http://jp.njuct.edu.cn/crystal/uploadtools/members/DELPHI6DCOM.mht
源代码请到http://086net.com下载
使用DELPHI6开发DCOM原型及其思考
作者:房客 tingweb@wx88.net
COM和DCOM的开发在DELPHI IDE中都不是令人头疼的事情,我们在飘逸在应用其自带的MIDAS组件面板(DELPHI6的DataSnap组件面板)来建立我们的DCOM应用(当然这也可能是受李唯老师那三本要人命的入门书引导)。
我们先来感受如何直观理解本文标题的含义——制作流程,最后再为大家介绍一下相关的知识和方向。
我们的方式分2步,先建立DCOM服务器(Application Server),再建立DCOM客户端(Client),在DELPHI环境(默认为打开空的Application工程)直接File菜单的New项的Other,然后选择ActiveX面板中的Automation Object(不明白的如图1):
(图1)
填写CoClassname,Delphi将帮你“自动化”一系列框架代码和接口、参数(不明白的如图2):
(图2)
此时TypeLibrary编辑器将自动弹出,我们也可以在任何时候在View菜单中的TypeLibrary将其激活(类似我们经常使用F12来切换Form和Code编辑区)。WHAT?从没用过TypeLibrary编辑器?OK,假设我们保存了工程为DCOMAppServer.dpr,主Form代码文件为Unit1.pas,我们的COM服务器文件(之后解释为什么这里称其为COM而不是DCOM)为DCOM_tlb.pas,然后在TypeLibrary编辑器中选择IDCOMAntetype,这是该DCOM的接口参数(不明白的如图3):
(图3)
我们接着干,注意TypeLibrary编辑器的快捷菜单,我们单击NewMethod(图3鼠标停留处),来建立我们需要的Procedure或者Function,我们试建立名为GetFile的函数,功能是以id来返回一个文件(今天我们就不HelloWorld了):
Function GetFile(id:integer): OleVariant;
TypeLibrary编辑器中单击这个Method,跳转到Parameters面板来定义该函数的参数(注意哦,这里接触的是一个类工厂(ClassFactory)设计方法的概念,OO就是以设计函数和类为基础的),我们把眼光放到属性问题上,点击参数的Modifier会让你设置In(输入)或者Out和Retval(输出返回),不明白的如图4和5:
(图4)
(图5)
保存一下,看看Delphi为我们做了什么,不明白的如图6:
(图6)
我们来填写函数实现功能(通俗地说就是在应用程序服务器实现应用逻辑),请配合
uses中添加Classes(TFileStream)、Variants(VarArray操作)和SysUtils(fmOpenRead)三项,这样服务器编译完成,不明白的如图7:
(图7)
开始建立该DCOM的客户端,DELPHI重新建立一个Application,窗体添加一个按钮,不明白的枪毙后如图8:
(图8)
由于要使用DCOMAntetype定义的类型库,我们在客户端为项目添加DCOM服务器中的类型库文件DCOMAppServer_TLB.pas(功能快捷键Shift+F11)并在uses中引用DCOMAppServer_TLB,老师上课应该都讲过的,不赘图了。然后实现ClientGetFile的功能,不明白的如图9:
(图9)
启动客户端和服务器端(服务器端只要在操作系统运行注册过即可由客户端随用随激活动),范例代码中的127.0.0.1可以是也计算机名,操作客户端你会发现“服务器端所在目录的指定文件2.txt内容被读到客户端所在目录的指定文件x2.txt中”,至此该DCOM原型开发完成。
思考一:
DCOM(于1996年推出)的应用程序服务端的配置在MSWindows95和MSWindows98下是众所周知的不简单,因此强烈建议使用MSWindowsNT/2000/XP作为服务运行端,但Microsoft还是尽心提供DCOM95(http://www.microsoft.com/com/dcom/dcom95/download.asp)和DCOM98(http://www.microsoft.com/com/dcom/dcom98/download.asp)。
思考二:
该DCOM服务的建立和COM的建立基本雷同但我们毕竟建立在进程外的COM服务器,在客户端建立通讯的时候我们就能发现其区别:
CoDCOMAntetype.CreateRemote(DCOM)
CoDCOMAntetype.Create(COM)
实际上DCOM的开发是建立在COM开发上的,因此这样合法的DCOM服务器完全可以作为COM服务器来使用。我们建立的DCOM服务器是一个进程外COM服务器(使之可以运行在不同计算机)。DELPHI引入类型库编辑的概念把开发人员从标准COM开发中解放出来。
思考三:
我们在范例中直接引用类型库源文件来提供DCOM接口,这是比较直观的偷懒的办法,我们通常导入一个.tlb类型库文件的做法是从Project菜单的Import Type Library项,添加(ADD)按钮指定tlb文件(如该项目为我们生成了DCOMAppServer.tlb文件)到工程。不明白的请如图10:
(图10)
思考四:
分布式计算的是整个计算机领域的革命性转变。其突出作用在于
对象化的RPC(Remote Procedure Call)
对象间的互操作性
对象间信息的传递
COM/DCOM是解释业务逻辑的一种表现方式,目前不断发展的衍生、相关技术还有CORBA、EJB(J2EE)、RMI、SOAP(WebServices)等,群雄逐鹿。
源代码请到http://086net.com下载
使用DELPHI6开发DCOM原型及其思考
作者:房客 tingweb@wx88.net
COM和DCOM的开发在DELPHI IDE中都不是令人头疼的事情,我们在飘逸在应用其自带的MIDAS组件面板(DELPHI6的DataSnap组件面板)来建立我们的DCOM应用(当然这也可能是受李唯老师那三本要人命的入门书引导)。
我们先来感受如何直观理解本文标题的含义——制作流程,最后再为大家介绍一下相关的知识和方向。
我们的方式分2步,先建立DCOM服务器(Application Server),再建立DCOM客户端(Client),在DELPHI环境(默认为打开空的Application工程)直接File菜单的New项的Other,然后选择ActiveX面板中的Automation Object(不明白的如图1):
(图1)
填写CoClassname,Delphi将帮你“自动化”一系列框架代码和接口、参数(不明白的如图2):
(图2)
此时TypeLibrary编辑器将自动弹出,我们也可以在任何时候在View菜单中的TypeLibrary将其激活(类似我们经常使用F12来切换Form和Code编辑区)。WHAT?从没用过TypeLibrary编辑器?OK,假设我们保存了工程为DCOMAppServer.dpr,主Form代码文件为Unit1.pas,我们的COM服务器文件(之后解释为什么这里称其为COM而不是DCOM)为DCOM_tlb.pas,然后在TypeLibrary编辑器中选择IDCOMAntetype,这是该DCOM的接口参数(不明白的如图3):
(图3)
我们接着干,注意TypeLibrary编辑器的快捷菜单,我们单击NewMethod(图3鼠标停留处),来建立我们需要的Procedure或者Function,我们试建立名为GetFile的函数,功能是以id来返回一个文件(今天我们就不HelloWorld了):
Function GetFile(id:integer): OleVariant;
TypeLibrary编辑器中单击这个Method,跳转到Parameters面板来定义该函数的参数(注意哦,这里接触的是一个类工厂(ClassFactory)设计方法的概念,OO就是以设计函数和类为基础的),我们把眼光放到属性问题上,点击参数的Modifier会让你设置In(输入)或者Out和Retval(输出返回),不明白的如图4和5:
(图4)
(图5)
保存一下,看看Delphi为我们做了什么,不明白的如图6:
(图6)
我们来填写函数实现功能(通俗地说就是在应用程序服务器实现应用逻辑),请配合
uses中添加Classes(TFileStream)、Variants(VarArray操作)和SysUtils(fmOpenRead)三项,这样服务器编译完成,不明白的如图7:
(图7)
开始建立该DCOM的客户端,DELPHI重新建立一个Application,窗体添加一个按钮,不明白的枪毙后如图8:
(图8)
由于要使用DCOMAntetype定义的类型库,我们在客户端为项目添加DCOM服务器中的类型库文件DCOMAppServer_TLB.pas(功能快捷键Shift+F11)并在uses中引用DCOMAppServer_TLB,老师上课应该都讲过的,不赘图了。然后实现ClientGetFile的功能,不明白的如图9:
(图9)
启动客户端和服务器端(服务器端只要在操作系统运行注册过即可由客户端随用随激活动),范例代码中的127.0.0.1可以是也计算机名,操作客户端你会发现“服务器端所在目录的指定文件2.txt内容被读到客户端所在目录的指定文件x2.txt中”,至此该DCOM原型开发完成。
思考一:
DCOM(于1996年推出)的应用程序服务端的配置在MSWindows95和MSWindows98下是众所周知的不简单,因此强烈建议使用MSWindowsNT/2000/XP作为服务运行端,但Microsoft还是尽心提供DCOM95(http://www.microsoft.com/com/dcom/dcom95/download.asp)和DCOM98(http://www.microsoft.com/com/dcom/dcom98/download.asp)。
思考二:
该DCOM服务的建立和COM的建立基本雷同但我们毕竟建立在进程外的COM服务器,在客户端建立通讯的时候我们就能发现其区别:
CoDCOMAntetype.CreateRemote(DCOM)
CoDCOMAntetype.Create(COM)
实际上DCOM的开发是建立在COM开发上的,因此这样合法的DCOM服务器完全可以作为COM服务器来使用。我们建立的DCOM服务器是一个进程外COM服务器(使之可以运行在不同计算机)。DELPHI引入类型库编辑的概念把开发人员从标准COM开发中解放出来。
思考三:
我们在范例中直接引用类型库源文件来提供DCOM接口,这是比较直观的偷懒的办法,我们通常导入一个.tlb类型库文件的做法是从Project菜单的Import Type Library项,添加(ADD)按钮指定tlb文件(如该项目为我们生成了DCOMAppServer.tlb文件)到工程。不明白的请如图10:
(图10)
思考四:
分布式计算的是整个计算机领域的革命性转变。其突出作用在于
对象化的RPC(Remote Procedure Call)
对象间的互操作性
对象间信息的传递
COM/DCOM是解释业务逻辑的一种表现方式,目前不断发展的衍生、相关技术还有CORBA、EJB(J2EE)、RMI、SOAP(WebServices)等,群雄逐鹿。