| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第7章 アプリケーションの開発(COBOL) | > 7.5 データ型に対するマッピング |
IDL言語で構造体structを指定した場合、COBOLでも構造体でデータ宣言します。
可変長構造体の場合、領域獲得関数(関数名は"モジュール名-インタフェース名-構造体名-ALLOC"、以降XX-ALLOC関数と呼ぶ)がIDLコンパイラで生成されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
struct samplefix { // 構造体(固定長)
long para1;
long para2;
};
struct samplevar { // 構造体(可変長)
long para1;
string para2;
};
interface structtest{
samplefix op2(
in samplefix str1,
out samplefix str2,
inout samplefix str3
);
samplevar op1(
in samplevar str1,
out samplevar str2,
inout samplevar str3
);
};
};
* 構造体(固定長)
01 ODSAMPLE-SAMPLEFIX.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2.
* 構造体(可変長)
01 ODSAMPLE-SAMPLEVAR.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 PARA2 USAGE IS POINTER.
構造体(固定長)のパラメタ(in,out,inout)を扱う場合、構造体のアドレスをパラメタに指定します。領域の獲得/解放を行う必要はありません。
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 FIX1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2.
01 FIX2.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2.
01 FIX3.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2.
01 FIX0.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2.
PROCEDURE DIVISION.
* inパラメタの設定
MOVE 10 TO PARA1 OF FIX1.
* inパラメタの設定
MOVE 11 TO PARA2 OF FIX1.
* inoutパラメタの設定
MOVE 20 TO PARA1 OF FIX3.
* inoutパラメタの設定
MOVE 21 TO PARA2 OF FIX3.
CALL "ODSAMPLE-STRUCTTEST-OP2" USING
OBJ
FIX1
FIX2
FIX3
ENV
FIX0.
クライアントアプリケーションのパラメタの扱いについて、以下に示します。
|
パラメタ |
サーバへ渡すパラメタ |
サーバから渡されたパラメタ |
|
in |
構造体領域/可変長データ域を獲得する場合、XX-ALLOC関数/データ域獲得関数を用います。 |
− |
|
inout |
(inパラメタと同じ) |
領域はスタブで自動的に獲得されます。 |
|
out |
− |
(inoutパラメタと同じ) |
クライアントおよびスタブで動的に獲得した領域は、不要になった時点でCORBA-FREE関数で解放する必要があります。CORBA-FREE関数を発行することで可変長データ域も解放されます。
以下にクライアントアプリケーションでの処理例を示します。
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 VAR1.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 PARA2 USAGE IS POINTER.
01 VAR2 USAGE POINTER.
01 VAR3-P USAGE POINTER.
01 VAR0 USAGE POINTER.
01 STR-WORK PIC X(30).
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE.
LINKAGE SECTION.
01 VAR3.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1.
02 PARA2 USAGE IS POINTER.
PROCEDURE DIVISION.
*inパラメタの設定
MOVE 5 TO PARA1 OF VAR1.
MOVE "test" TO STR-WORK.
MOVE FUNCTION LENG(STR-WORK) TO LSIZE
CALL "CORBA-STRING-SET" USING
PARA2 OF VAR1
LSIZE
STR-WORK.
*inoutパラメタの領域獲得
CALL "ODSAMPLE-SAMPLEVAR-ALLOC" USING
VAR3-P.
SET ADDRESS OF VAR3 TO VAR3-P.
*inoutパラメタの設定
MOVE 4 TO PARA1 OF VAR3.
MOVE "pro" TO STR-WORK.
MOVE FUNCTION LENG(STR-WORK) TO LSIZE.
CALL "CORBA-STRING-SET" USING
PARA2 OF VAR3
LSIZE
STR-WORK.
CALL "ODSAMPLE-STRUCTTEST-OP1" USING
OBJ
VAR1
VAR2
VAR3-P
ENV
VAR0.
CALL "CORBA-FREE" USING PARA2 OF VAR1.
CALL "CORBA-FREE" USING VAR2.
CALL "CORBA-FREE" USING VAR3-P.
CALL "CORBA-FREE" USING VAR0.
目次
索引
![]()
|