设为首页
联系站长
加入收藏

您的位置: 首页>>IT业界>>互联网>>正文
 关于VisiBroker For Delphi的使用(3)
 日期:2006-1-20 9:32:39  来源:CSDN
《关于VisiBroker For Delphi的使用》——CORBA技术实践(三)
三、数组对象与简单数据对象的传递

前面提到了一些较为简单的数据操作,我们都可以想象一下,如果操作CORBA对象与操作C/S结构的数据对象一样的方便,那么CORBA又有什么神奇了,不知道看过李维的分布式多层应用系统的书籍时,是否留意到李维对CORBA的评价,无论你看过还是没有看过,我都要告诉正在使用CORBA编程的朋友们,CORBA比COM/COM+简单,而CORBA的跨平台特性,以及与COM/COM+同样的负载平衡能力,足以让我们将这项分布式技术应用到应用体系的设计之中,其实对于使用Borland的产品开发分布式系统无论你采用CORBA或是COM/COM+其实最核心的技术就是MIDAS,因为你总可以在CORBA/COM/COM+中看到MIDAS的影子,所以我建议无论你是准备学习CORBA还是学习COM/COM+最好先学习一下MIDAS,本文不涉及MIDAS,关于MIDAS请看李维的《Delphi5.X分布式多层应用—系统篇》。

为什么我从开始就一直要大家使用文本编辑器之类的东西书写IDL,而不用TypeLibrary来书写IDL,其实我觉得只是为了让刚刚接触CORBA的程序员获得一些更多的IDL方面的知识罢了,在实际的开发中你可以完全很方便的使用TypeLibrary来编写接口规则。

下面我简要的列举几类IDL书写的事例与利用IDL2PAS生成的PASCAL代码。

1、常量的定义

/**IDL书写**/

module MyCRB{

const long iMyConst=1;

interface myFace {

const long iiMyConst=2;

};

};

/**Pascal**/

unit MyCRB_I;

interface

uses Corba;

const

iMyCOnst:integer=1;

myFace_iiMyConst=2;

2、不在接口中申明的常量

/**IDL**/

module MyCRB{

const long myconst=1;

};

/*pascal*/

unit MyCRB_I;

interface

const myconst:integer=1;

3、枚举类型

/*IDL*/

enum MyCRBKind{A,B,C,D,……..}

/*pascal*/

myCRBkind=(A,B,C,D……..);

4、结构体

/*IDL*/

struct mystructtype{

long X;

string Y;

boolean Z;

};

/*pascal*/

//XXX_I.pas

type mystructtype=interface;

//XXX_C.pas

mystructtype=interface

function _get_X:integer;

function _get_Y:string;

function _get_Z:boolean;

procedure _set_X(const Value:integer);

procedure _set_Y(const Value:string);

procedure _set_Z(const Value:boolean);

property X:integer read _get_X write _Set_X;

property Y:string read _get_Y write _Set_Y;

property Z:boolean read _get_Z write _Set_Z;

…….

还有太多的代码,自己创建一个看一下,为了节约篇幅我就不做详细的翻译了

下面请大家试一下以下的申明会生成什么样的Pascal代码
5、联合体

union un_exp switch(long)

{

case 1:long x;

case 2:string y;

case 3:st_exp Z;

};

6、sequence(我理解为动态数组)

typedef sequence UnboundeSeq;

typedef sequence ShortBoundSeq

7、数组

const long ArrayBound=10;

typedef long longArray[ArrayBound];

8、抽象接口

module exp{

interface myface{

long op(in string s);

};

};

9、多重继承

module M{

interface A{

void A1();

void A2();

};

interface B{

void B1();

void B2();

};

interface AB:B,A{

void AB1()

void AB2();

};

};

10、交叉模型定义

module m1{

interface if1;

module m2{

interface if2{

m1::if1 getIf1();

};

interface if1{

m2::if2 getif2()

};

};

};

以上我介绍了一些数据的定义规范,然而我们需要不仅仅是这样的一些比较抽象的接口定义法则,我们要将法则应用到实际的开发中去,那么我们又是如何运用这些法则了,对于接口描述语言的翻译我前面讲到直接使用IDL2PAS就不讲了,以后的章节中也不会在去将如何转换的问题。下面我们实践一下:
编写接口定义一个返回为浮点类型,输入为短整型变量数组对象的方法

typedef short ArrayType[3];

//自定义类型定义长度为3的数组

interface Account {

float InputArray(in ArrayType myArray);//输入为整形数组,返回类型为float的方法

};

//服务端程序的处理xxx_impl.pas

interface

uses

SysUtils,

CORBA,

account_i,

account_c;

type

TAccount = class;

TAccount = class(TInterfacedObject, account_i.Account)

protected

//******************

public

constructor Create;

function InputArray ( const myArray : account_i.ArrayType): Single;

end;

implementation

uses ServerMain;

constructor TAccount.Create;

begin

inherited;

end;

function TAccount. InputArray (const myArray : account_i.ArrayType): Single;

var

j: Integer;

begin

// account_i.ArrayType是指我们自定义的数组类型在account_I单元中

for j := 0 to 2 do

begin

Form1.Memo1.Lines.Add('myArray[' + IntToStr(j) + '] = ' + IntToStr(myArray[j]) );

//接受从客户端传递过来的数组变量并将其依次加入到主窗体的MEMO中

end;

result := random * 100;//返回一个随机数

end;

initialization

randomize;

end.

//服务端程序主单元

unit ServerMain;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Corba,

Account_I, Account_C, Account_S, Account_Impl, StdCtrls;

type

TForm1 = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

本新闻共3页,当前在第1页  1  2  3  

相关文章

·Delphi让你发送Flash电子邮件
·在线播放器DIY
·关于VisiBroker For Delphi的使用
·关于VisiBroker For Delphi的使用
·delphi实例编程之--制作可随处拖
·Delphi的两个实用技巧(2)巧用Win
·Delphi的两个实用技巧(1)播放Fla


阅读排行

·Win 2000不能访问Win XP的原因及
·解析Windows中的帐户和权限功能
·如何共享Windows XP操作系统
·Windows XP Service Pack 1
·通过 Windows XP 注册表自定义您
·Windows 2000 TCP/IP协议概述
·Windows 2000 Server TCP/IP协议
·dos常用命令使用说明
·Windows变慢原因分析及解决方法(
·Windows变慢原因分析及解决方法(
·WINXP下强行关闭“杀”不了的进程
·Windows XP系统注册表的恢复

最新文档

·创业激情需冷静 网络代理选择应理
·域名交易平台亟需规范 预防域名买
·Travel旅游域名即将引发抢注潮 
·从原理深处分析如何预防arp攻击
·突破建站弊端 企业网络营销大有可
·如何区分进程和病毒?
·java的基础知识,如何学好java
·微机原理与接口技术基础知识
·如何解决青少年沉迷网络的问题,
·全面分析主板BIOS报警信号

请您注意:
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·您在本站发表的作品,本站有权在网站内转载或引用
·其他网站如果需要转载 本站文章请在贵站著名来源,谢谢合作