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

原创 2002年01月22日 11:32:00
                     《关于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()//注意大小写

}

}

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

现在按照我们上一届讲的生成框架代码,接下来我们在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.

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

 

《关于VisiBroker For Delphi的使用》

 《关于VisiBroker For Delphi的使用》-CORBA技术实践(一)宜昌市中心人民医院            赵普昉email: 3boy@sohu.com一、如何创建服务器对象在De...
  • 3boy
  • 3boy
  • 2002年01月18日 09:32
  • 774

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

 《关于VisiBroker For Delphi的使用》-CORBA技术实践(一)宜昌市中心人民医院            赵普昉                                  ...
  • 3boy
  • 3boy
  • 2002年02月23日 08:43
  • 784

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

 《关于VisiBroker For Delphi的使用》(3)-CORBA技术实践(一)宜昌市中心人民医院            赵普昉email: 3boy@sohu.com 3,数组对象与简单数...
  • 3boy
  • 3boy
  • 2002年01月28日 09:00
  • 1063

Delphi的实数计算结果中只保留2位小数

Delphi的实数计算结果中如何只保留2位小数━━━━━━━━━━━━━━━━━━━━━━━━━━你可以使用这样的办法:      x := Round(x * 100) / 100;        ...
  • alsamsung
  • alsamsung
  • 2011年03月01日 20:38
  • 7084

关于Delphi7中日期函数StrtoDate的正确用法 win7报错

转载请注明出处:http://user.qzone.qq.com/236572970 作者:dydn120w 1.StrToDate为delphi7中字符串转换为日期的函数 StrToDate本身是没...
  • dydn120w
  • dydn120w
  • 2016年04月11日 02:58
  • 3309

Delphi DateUtils时间单元

Uses DateUtils //时间单元,非常有用。记得引用这个单元,不然不能用。CompareDate 比较两个日期时间值日期部分的大小 CompareDateTime 比较两个日期时间值的大...
  • sforiz
  • sforiz
  • 2015年07月29日 10:27
  • 1651

有关socket确认连接

 问题:我寫了一個互通信程序,分別使用clientsocket和serversocket,連接後執行各種操作,一切都很正常,但只要在一段較常時間(約半小時)裡,程序在已連接的狀態下而沒有進行任何通信,...
  • Devillyd
  • Devillyd
  • 2006年11月02日 16:17
  • 5151

DELPHI 6 抢先研究-- BizSnap/SOAP/WebService 之二

DELPHI 6 抢先研究-- BizSnap/SOAP/WebService 之二 -- 通过 SOAP 传递自定义类型数据     在前一个例子(见 《DELPHI 6 抢先研究 -- BizSn...
  • Raptor
  • Raptor
  • 2001年10月27日 00:35
  • 4533

Delphi 二进制字符与十进制互转

//二进制字符转十进制 Function binToDec(Value :string) : integer;VARstr : String;Int : Integer;i : integer;BEG...
  • qiume
  • qiume
  • 2009年01月07日 10:46
  • 5880

Delphi检测.Net版本

检测.Net环境,用C#或者VB来说,貌似不可行,因为他们的运行也需要.Net支持。用2.0写过,但在Win10下检测工具无法运行。C++没掰扯明白,所以用从未接触过的Delphi来实现。 目前网上...
  • FlyAurora
  • FlyAurora
  • 2017年07月12日 15:10
  • 619
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《关于VisiBroker For Delphi的使用》(2)
举报原因:
原因补充:

(最多只允许输入30个字)