分享
 
 
 

《关于VisiBroker For Delphi的使用》(2)

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

《关于VisiBroker For Delphi的使用》

-CORBA技术实践(二)

宜昌市中心人民医院 赵普昉

email: 3boy@sohu.com

2,一个真实的CORBA小服务程序

我们都知道无论是Ejb,Com/Dcom/MTS/Com+,还是Midas/Corba这样一些三层体系,最重要的架构中介体系,对于理论上的东西,较为抽象没有必要在这里谈这样一些高深的理论,这些还是留给大师去述说吧,我们只需要理解大师们交给我们的工具就可以了,我们可以叫这些中介集群为中介对象群,实际上就是把我们在C/S中的公共部分或人机交互程序分为了,人与程序,程序与数据库之间的交互,这样做的目的大师们说的

非常好了。经过程序系统架构师的设计,我们可以清晰的看到我们的中介对象,也就是那些以不同形式放在,应用服务器上的对象。客户程序可以完全不去理会后台过多的执行明细,服务程序不用过多的被客户程序所牵制,一切都由Interface来发布所有的衔接规则。那么剩下来的问题就非常简单了,那就是有什么样的接口,接口可以独立于客户与服务器而独立编写,这就是我们的Corba for Delphi6中强调的东西。

在我们申明接口之前我首先简要的叙述一下IDL2PAS的一些相关保留字和操作符

AND ARRAY AS ASM

BEGIN CASE CLASS CONST

CONSTRUCTOR DESTORY DISPINTERFACE

DIV DO DOWNTO ELSE

END EXCEPT EXPORTS FILE

FINALIZATION FINALLY FOR FUNCTION

GOTO IF IMPLEMENTATION IN

INHERITED INITIALIZATION INLINE INTERFACE

IS LABEL LIBARAY MOD

NIL NOT OBJECT OF

OR PACKED PROCEDURE PROGRAM

PROPERTY RAISE RECORD REPEAT RESOURCESTRING

SET SHL SHR STRING THEN THREADVAR

TO TRY TYPE UNIT UNTIL USER VAR

WHILE WITH XOR

沿用的Pascal保留字

Boolean Char WideChar Shortint Smallint Integer Byte

Word Extended Pointer AnsiChar Longint Cardinal Single

Double Real Real48 Comp Currency ShortString Openstring file

Text TextFile PAnsiChar PChar PWideChar ByteBool Wordbool

LongBool AnsiString WideString TVarArrayBound PVarArray TVarData PVarData TVarArray PShortString PAnsiString PWideString PString Pextended

PCurrency TDateTime PVarRec String Variant TObject Tclass Iunknown

TinterfaceObject TGUID PGUID Int64 Application Screen Print Printer

(将与PASCAL做一个比较,注意大小写)

数据基本类型

IDL 类型 Pascal 类型

boolean Boolean

char Char

wchar WideChar

octet Byte

string AnsiString

wstring WideString

short SmallInt

unsigned short Word

long Integer

unsigned long Cardinal

long long Int64

unsigned long long Int64

float Single

double Double

long double Extended

fixed {没有对应类型}

以上的保留字和操作符会在我的文章中足一介绍,这里就不具体描述了。

我们开始编一个小程序来说明一下

照样先申明一个接口描述:

表示我要传递一个任意类型信息

module Crb{

interface TestAny{

any getany();//注意大小写

};

} ;

现在按照我们上一届讲的生成框架代码,接下来我们在Crb_impl中加入

Result := StrToInt(Form1.Edit1.Text);

加在那儿呢加在Getany方法中哪,如下

function TTestAny.GetAny : ANY;

begin

Result := StrToInt(Form1.Edit1.Text);

end;

这个接口的意义是将我们的服务程序的主窗体上的Edit1上的字符串返回给接口,以便于客户程序从接口获得该字符数据。

当然必须在我们的主窗体上作如下声明

unit ServerMain;

interface

uses

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

CRB_I, CRB_C, CRB_S, CRB_Impl, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Edit1: TEdit;

procedure FormCreate(Sender: TObject);

private

{ private declarations }

protected

MyAnyTest :TTestAny; // 主干对象

procedure InitCorba;

public

{ public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.InitCorba;

begin

CorbaInitialize;

//加入CRB服务代码

MyAnyTest := TTestAnySkeleton.Create('Any Test Server', TMyTest.Create);

BOA.ObjIsReady(MyAnyTest as _Object);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

InitCorba;

end;

end.

接下来我们的客户程序如何获得这个字符串呢?

那么我们只需要在客户程序中去引用这个接口方法就够了,代码如下

unit ClientMain;

interface

uses

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

StdCtrls, Corba, CRB_I, CRB_C;

type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

FromIStr :TTestAny;

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

CorbaInitialize;

FromIStr:= TTestAnyHelper.bind;//创建一个接口的实例

end;

procedure TForm1.Button1Click(Sender: TObject);

var myAny : Any;

begin

myAny := FromIStr.GetAny();//引用接口实例的方法

Label1.Caption := IntToStr(myany);

//将方法的结果转化为字符串,付给Label1.Caption

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

FromIStr:= nil;

//释放接口实例对象

end;

end.

您理解上面的程序吗?下一小节我们将继续讲解如何传递一个数组对象,错误之处还请来函指正哟!下次再见

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有