《關於VisiBroker For Delphi的使用》——CORBA技術實踐(二)
宜昌市中心人民醫院 趙普昉 email:
[email protected]二、一個真實的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
unsig
ned 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;