| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第7章 アプリケーションの開発(COBOL) | > 7.5 データ型に対するマッピング |
IDL言語で配列を指定した場合、COBOLのOCCURS句でデータ宣言します。配列名は"モジュール名-インタフェース名-配列名-V"となり、用途に応じてCOPY文で定義します。配列のインデックスは1から始まり<配列の大きさ>までとなります。また、配列の領域獲得関数(関数名は"モジュール名-インタフェース名-配列名-ALLOC"、以降XX-ALLOC関数と呼ぶ)がIDLコンパイラで生成されます。
以降では、以下のIDL定義例をもとに説明します。
module ODsample{
interface arraytest{
typedef long fix[4][3][2]; // 配列(固定長)
typedef string str[2][3][4]; // 配列(可変長)
fix op1(in fix para1, out fix para2, inout fix para3 );
str op2(in str para1, out str para2, inout str para3 );
};
};
01 ODSAMPLE-ARRAYTEST-FIX.
02 FILLER OCCURS 4.
03 FILLER OCCURS 3.
04 FILLER OCCURS 2.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY ODSAMPLE-ARRAYTEST-FIX-V.
01 ODSAMPLE-ARRAYTEST-STR.
02 FILLER OCCURS 2.
03 FILLER OCCURS 3.
04 FILLER OCCURS 4.
05 ODSAMPLE-ARRAYTEST-STR-V USAGE IS POINTER.
配列(固定長)のin、out、inoutパラメタを扱う場合、領域の獲得/解放を行う必要はありません。復帰値は、スタブで自動的に配列領域が獲得されるため、アプリケーションで不要になった時点で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 PARA1.
02 FILLER OCCURS 4.
03 FILLER OCCURS 3.
04 FILLER OCCURS 2.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY ODSAMPLE-ARRAYTEST-PARA1-V.
01 PARA2.
02 FILLER OCCURS 4.
03 FILLER OCCURS 3.
04 FILLER OCCURS 2.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY ODSAMPLE-ARRAYTEST-PARA2-V.
01 PARA3.
02 FILLER OCCURS 4.
03 FILLER OCCURS 3.
04 FILLER OCCURS 2.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY ODSAMPLE-ARRAYTEST-PARA3-V.
01 FIX0.
02 FILLER OCCURS 4.
03 FILLER OCCURS 3.
04 FILLER OCCURS 2.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY ODSAMPLE-ARRAYTEST-FIX0-V.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY J.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY K.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
PROCEDURE DIVISION.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 4
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
PERFORM VARYING K FROM 1 BY 1 UNTIL K > 2
MOVE I TO ODSAMPLE-ARRAYTEST-PARA1-V( I J K )
COMPUTE NUM = I * 10
MOVE NUM TO ODSAMPLE-ARRAYTEST-PARA3-V( I J K )
END-PERFORM
END-PERFORM
END-PERFORM.
CALL "ODSAMPLE-ARRAYTEST-OP1" USING
OBJ
PARA1
PARA2
PARA3
ENV
FIX0.
配列(可変長)のinoutパラメタ、outパラメタ、復帰値は、スタブでXX-ALLOC関数により配列領域が獲得されるため、アプリケーションで不要になった時点で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 STR1.
02 FILLER OCCURS 2.
03 FILLER OCCURS 3.
04 FILLER OCCURS 4.
05 ODSAMPLE-ARRAYTEST-STR1-V USAGE IS POINTER.
01 STR2 USAGE POINTER.
01 STR3 USAGE POINTER.
01 STR0 USAGE POINTER.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY J.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY K.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY NUM.
01 STR1 X(20).
01 STR2 X(20).
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE.
LINKAGE SECTION.
01 STR3-P.
02 FILLER OCCURS 2.
03 FILLER OCCURS 3.
04 FILLER OCCURS 4.
05 ODSAMPLE-ARRAYTEST-STR3-V USAGE IS POINTER.
PROCEDURE DIVISION.
CALL "ODSAMPLE-ARRAYTEST-STR-ALLOC" USING STR3.
SET ADDRESS OF STR3-P TO STR3.
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
MOVE "str1[I][J][K]" TO STR1-D
MOVE "str3[I][J][K]" TO STR2-D
EVALUATE I
WHEN 1
INSPECT STR1-D REPLACING ALL "I" BY "0"
INSPECT STR2-D REPLACING ALL "I" BY "0"
WHEN 2
INSPECT STR1-D REPLACING ALL "I" BY "1"
INSPECT STR2-D REPLACING ALL "I" BY "1"
END-EVALUATE
EVALUATE J
WHEN 1
INSPECT STR1-D REPLACING ALL "J" BY "0"
INSPECT STR2-D REPLACING ALL "J" BY "0"
WHEN 2
INSPECT STR1-D REPLACING ALL "J" BY "1"
INSPECT STR2-D REPLACING ALL "J" BY "1"
WHEN 3
INSPECT STR1-D REPLACING ALL "J" BY "2"
INSPECT STR2-D REPLACING ALL "J" BY "2"
END-EVALUATE
EVALUATE K
WHEN 1
INSPECT STR1-D REPLACING ALL "K" BY "0"
INSPECT STR2-D REPLACING ALL "K" BY "0"
WHEN 2
INSPECT STR1-D REPLACING ALL "K" BY "1"
INSPECT STR2-D REPLACING ALL "K" BY "1"
WHEN 3
INSPECT STR1-D REPLACING ALL "K" BY "2"
INSPECT STR2-D REPLACING ALL "K" BY "2"
WHEN 4
INSPECT STR1-D REPLACING ALL "K" BY "3"
INSPECT STR2-D REPLACING ALL "K" BY "3"
END-EVALUATE
MOVE FUNCTION LENG(STR1-D) TO LSIZE
CALL "CORBA-STRING-SET" USING
ODSAMPLE-ARRAYTEST-STR1-V( I J K )
LSIZE
STR1-D
MOVE FUNCTION LENG(STR2-D) TO LSIZE
CALL "CORBA-STRING-SET" USING
ODSAMPLE-ARRAYTEST-STR3-V( I J K )
LSIZE
STR2-D
END-PERFORM
END-PERFORM
END-PERFORM.
CALL "ODSAMPLE-ARRAYTEST-OP2" USING
OBJ
STR1
STR2
STR3
ENV
STR0.
* inパラメタは、データ値の設定時に獲得した領域のみを解放してください。
PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
PERFORM VARYING K FROM 1 BY 1 UNTIL K > 4
CALL "CORBA-FREE" USING ODSAMPLE-ARRAYTEST-STR1-V( I J K )
END-PERFORM
END-PERFORM
END-PERFORM.
CALL "CORBA-FREE" USING
STR0.
CALL "CORBA-FREE" USING
STR2.
CALL "CORBA-FREE" USING
STR3.
目次
索引
![]()
|