程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 關於VisiBroker For Delphi的使用(3)

關於VisiBroker For Delphi的使用(3)

編輯:Delphi
《關於VisiBroker For Delphi的使用》——CORBA技術實踐(三)

宜昌市中心人民醫院 趙普昉 email: [email protected]

三、數組對象與簡單數據對象的傳遞

前面提到了一些較為簡單的數據操作,我們都可以想象一下,如果操作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的方法

};

//服務端程序的處理

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved