Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第7章 アプリケーションの開発(COBOL) | > 7.9 データ型に対するマッピング |
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.
構造体(固定長)のパラメタ(in,out,inout)を扱う場合、構造体領域はスケルトンで自動的に獲得/解放されます。out、inoutパラメタをクライアントアプリケーションに渡す場合、処理結果を構造体メンバに設定します。
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRUCTTEST-OP2". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 STR-WORK PIC X(30). 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 STR1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2. 01 STR2. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2. 01 STR3. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. 01 FIX. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA2. PROCEDURE DIVISION USING OBJ STR1 STR2 STR3 ENV FIX. MAIN SECTION. * outパラメタの設定 MOVE 0 TO PARA1 OF STR2. MOVE 1 TO PARA2 OF STR2. * inoutパラメタの設定 MOVE 2 TO PARA1 OF STR3. MOVE 3 TO PARA2 OF STR3. * 復帰値の処理 MOVE 4 TO PARA1 OF FIX. MOVE 5 TO PARA2 OF FIX. MAIN-END. END PROGRAM "ODSAMPLE-STRUCTTEST-OP2".
サーバアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ |
クライアントからのパラメタ領域 |
クライアントへのパラメタ領域 |
in |
構造体領域/可変長データ域はスケルトンで自動的に獲得/解放されます。 |
− |
inout |
構造体領域/可変長データ域はスケルトンで自動的に獲得されます。 |
可変長データ域をCORBA-FREE関数で一度解放し、データ域獲得関数で再獲得します。 |
out |
− |
構造体/可変長データ域をXX-ALLOC関数/データ域獲得関数で獲得します。 |
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRUCTTEST-OP1". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 STR-WORK PIC X(30). LINKAGE SECTION. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 STR1. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 PARA2 USAGE IS POINTER. 01 STR2 USAGE IS POINTER. 01 STR2-P. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 PARA2 USAGE IS POINTER. 01 STR3 USAGE IS POINTER. 01 STR3-P. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 PARA2 USAGE IS POINTER. 01 STR0-P. 02 COPY LONG IN CORBA REPLACING CORBA-LONG BY PARA1. 02 PARA2 USAGE IS POINTER. 01 STR0 USAGE IS POINTER. 01 ENV. 03 MAJOR PIC 9(9) COMP-5. 88 CORBA-NO-EXCEPTION VALUE 0. 88 CORBA-USER-EXCEPTION VALUE 1. 88 CORBA-SYSTEM-EXCEPTION VALUE 2. 03 IDL-ID USAGE POINTER. 03 MINOR PIC 9(9) COMP-5. 03 IDL-STATUS PIC 9(9) COMP-5. 03 PARAM USAGE POINTER. 03 MAGIC PIC 9(9) COMP-5. PROCEDURE DIVISION USING OBJ STR1 STR2 STR3 ENV STR0. MAIN SECTION. *outパラメタの処理 CALL "ODSAMPLE-SAMPLEVAR-ALLOC" USING STR2. SET ADDRESS OF STR2-P TO STR2. MOVE 12 TO PARA1 OF STR2-P. MOVE "(*str2)->para2" TO STR-WORK. MOVE FUNCTION LENG(STR-WORK) TO LSIZE CALL "CORBA-STRING-SET" USING PARA2 OF STR2-P LSIZE STR-WORK. *inoutパラメタの処理 SET ADDRESS OF STR3-P TO STR3. CALL "CORBA-FREE" USING PARA2 OF STR3-P. MOVE 12 TO PARA1 OF STR3-P. MOVE 16 TO LSIZE. MOVE "(*str3)->para2" TO STR-WORK. MOVE FUNCTION LENG(STR-WORK) TO LSIZE CALL "CORBA-STRING-SET" USING PARA2 OF STR3-P LSIZE STR-WORK. *復帰値の処理 CALL "ODSAMPLE-SAMPLEVAR-ALLOC" USING STR0. SET ADDRESS OF STR0-P TO STR0. MOVE 11 TO PARA1 OF STR0-P. MOVE 16 TO LSIZE. MOVE "(*str2)->para2" TO STR-WORK. MOVE FUNCTION LENG(STR-WORK) TO LSIZE CALL "CORBA-STRING-SET" USING PARA2 OF STR0-P LSIZE STR-WORK. MAIN-END. END PROGRAM "ODSAMPLE-STRUCTTEST-OP1".
目次
索引
![]() ![]() |