馈信息,可以调用UnmershalWideText。
框架的目的在于接收由存根对Invoke的调用而传来的消息。当它收到消息后,就调用真正的GetName方法,接着把结果包装起来迅速传给客户,实现方法如下:
Procedure
TcorbaTestSkeleton.GetName(constInBuf:ImarshalInBuffer;Cookie:Pointer);
Var
OutBuf: ImarshalOutBuffer;
Retval: WideString;
Begin
Retval:=Fintf.GetName;
Fskeleton.GetReplyBuffer(Cookie,OutBuf);
OutBuf.PutWideText(PwideChar(Pointer(Retval)));
End;
该
程序分两步:
第一步:是从由Delphi自动设置的内部Fintf变量调用Get Name。Fintf仅仅是一个指向对象真实接口的指针。因为现在正处于服务器本身当中,因此,这是指向你所创建的实际对象的真实指针。
第二步:是将函数结果包装起并把它送回客户端,你将通过调用GetReplyBuffer和PutWideText完成该步骤。
6、 接口定义语言
接口定义语言(IDL)用于定义对象的接口,一个对象的接口指定该对象所支持的类型和操作,因而唯一定义了可用于该对象的请求形式。所有接口均隐式从CORBA模块中定义的Object接口中导出。
接口定义语言(IDL)的重要特征是其语言无关性,这使得对象可用不同的
程序设计语言构造,且依然可相互通信,CORBA规范通过精确定义基本数据类型的长度,保证了在异构硬件平台上的互操作性。
三、 Delphi4中CORBA客户和服务器对象分布式工作机理
Delphi4工具支持CORBA标准,并为开发分布式应用
程序提供了优良的环境。
图中客户和服务器两边都有一个代理。在Delphi4中,真实的存根与框架由Delphi4在创建CORBA对象时自动生成,并存放于CORBA对象_TLB.pas命名的文件中。存根与框架这对代理使客户感觉到好象真的与服务器直接通信,而它们的具体实现存在于服务器中。在Delphi4中ORB就是一组动态连接库,它们提供了网络传输层以下的通信机制。图中的OsAgent不是CORBA标准中的一部分,它的宗旨在于帮助客户机连接到服务器上去,并执行其它一些类似于负载均衡和重启崩溃等重要任务。当客户程序启动时,它使用ORB与OsAgent进行通信,使客户机自动连接到服务器上去,换句话说,OsAgent有目录服务功能,它能够自动找出对象的位置。应该指出的是,在实现分布式应用程度过程中,客户、服务器双方必须都安装有OsAgent
程序,同时必须在通信之前启动了OsAgent服务。
四、 Delphi中两个重要的CORBA存储库
1、 Interface Reposity
Interface Reposity是一个用来存储有关对象的具体内容的地方。该资源库有三种用途:
1)、它为用户提供了一个场所,用户可以通过它来查看有关对象的详细信息。
2)、它提供了允许CORBA对方法调用进行类型检查的机制。
3)、它允许在运行期间对一个对象进行动态调用。
2、 Implementation Reposity
Implementation Reposity用来存储有关服务器的信息,这样服务器才能自动被Smart Agent启动,尤其是Implementation Reposity含有有关服务器的名字及用来找到它的可执行
程序的路径信息。
当一项叫做OAD(即Object Activation Daemon)的CORBA服务器需要启动一个服务器时,OAD可以通过查看Implementation Reposity,并执行其中的文件来给服务器定位。换句话说,Implementation Reposity中存储着服务器的路径、可执行文件名及其他一些相关的信息,如果该服务器并未运行但却已在Implementation Reposity中注册过了,那么Smart Agent可以请求OAD来启动它。
五、 在Delphi中使用CORBA
为在Delphi中使用Corba技术,首先要创建服务器和客户,然后在此基础上创建各类实用程序。服务器和客户
程序创建如下:
1、 服务器的创建
创建CORBA服务器所需的步骤如下: