(1)IDLマッピング
IDL言語で文字列型stringを指定した場合、COBOLでは英数字項目、またはPOINTERでデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
typedef string<10> t_bound_string;
module ODsample{ //文字列(固定長) interface stringtest{ t_bound_string op1(in t_bound_string str1, out t_bound_string str2, inout t_bound_string str3); }; };
module ODsample{ //文字列(可変長) interface stringtest{ string op1(in string str1, out string str2, inout string str3); }; };
* 文字列(固定長) IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. *オブジェクトリファレンス 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. * inパラメタ 01 STR1 PIC X(10). * outパラメタ 01 STR2 PIC X(10). * inoutパラメタ 01 STR3 PIC X(10). *例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. *復帰値 01 RET PIC X(10). PROCEDURE DIVISION. CALL "ODSAMPLE-STRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET. * 文字列(可変長) IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1". ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. *オブジェクトリファレンス 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. * inパラメタ 01 STR1 USAGE POINTER. * outパラメタ 01 STR2 USAGE POINTER. * inoutパラメタ 01 STR3 USAGE POINTER. *例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. *復帰値 01 RET USAGE POINTER. PROCEDURE DIVISION. CALL "ODSAMPLE-STRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET.
(2)クライアントアプリケーションで扱うパラメタ(固定長)
文字列(固定長)のパラメタ(in,out,inout)を扱う場合、領域の獲得/解放を行う必要はありません。データ域にデータを設定します。
以下にクライアントアプリケーションでのDATA DIVISIONおよびPROCEDURE DIVISIONの処理例を示します。
DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 STR1 PIC X(10). 01 STR2 PIC X(10). 01 STR3 PIC X(10). 01 RET PIC X(10). 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. PROCEDURE DIVISION. * inパラメタの設定 MOVE "IN" TO STR1. * inoutパラメタの設定 MOVE "INOUT:1” TO STR3. CALL "ODSAMPLE-STRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET.
(3)クライアントアプリケーションで扱うパラメタ(可変長)
クライアントアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ | サーバへ渡すパラメタ | サーバから渡されたパラメタ |
in | CORBA-STRING-SET関数を使用して、文字列+終端文字’\0’分の領域獲得と文字列設定を行います。 | - |
inout | (inパラメタと同じ) | 領域はスタブで自動的に獲得されます。 |
out | - | (inoutパラメタと同じ) |
クライアントおよびスタブで獲得した領域は、不要になった時点でCORBA-FREE関数で解放する必要があります。
以下にクライアントアプリケーションでのDATA DIVISIONおよびPROCEDURE DIVISIONの処理例を示します。
DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. 01 STR1 USAGE POINTER. 01 STR2 USAGE POINTER. 01 STR3 USAGE POINTER. 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. 01 RET USAGE POINTER. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. 01 STR-WORK PIC X(30). PROCEDURE DIVISION. * inパラメタの設定 MOVE "IN" TO STR-WORK. MOVE 3 TO LSIZE. CALL "CORBA-STRING-SET" USING STR1 LSIZE STR-WORK. * inoutパラメタの設定 MOVE "INOUT:1” TO STR-WORK. MOVE 8 TO LSIZE. CALL "CORBA-STRING-SET" USING STR3 LSIZE STR-WORK. CALL "ODSAMPLE-STRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET. * 復帰値用領域の解放 CALL "CORBA-FREE" USING RET. * inパラメタ用領域の解放 CALL "CORBA-FREE" USING STR1. * outパラメタ用領域の解放 CALL "CORBA-FREE" USING STR2. * inoutパラメタ用領域の解放 CALL "CORBA-FREE" USING STR3.
(4)サーバアプリケーションで扱うパラメタ(固定長)
文字列(固定長)のパラメタ(in,out,inout)を扱う場合、領域の獲得/解放を行う必要はありません。データ域にデータを設定します。
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. 01 STR-WORK PIC X(30). LINKAGE SECTION. * オブジェクトリファレンス 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. * inパラメタ 01 STR1 PIC X(10). * outパラメタ 01 STR2 PIC X(10). * inoutパラメタ 01 STR3 PIC X(10). 01 STR PIC X(10). * 例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. PROCEDURE DIVISION USING OBJ STR1 STR2 STR3 ENV STR. MAIN. * outパラメタの処理 MOVE "OUT" TO STR2. * inoutパラメタの処理 MOVE "INOUT:2" TO STR3. * 復帰値の処理 MOVE "RETURN" TO STR. MAIN-END. END PROGRAM "ODSAMPLE-STRINGTEST-OP1".
(5)サーバアプリケーションで扱うパラメタ(可変長)
サーバアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ | クライアントから渡されたパラメタ | クライアントへ渡すパラメタ |
---|---|---|
in | 文字列域はスケルトンで自動的に獲得/解放されます。 | - |
inout | 文字列域はスケルトンで自動的に獲得されます。 | 渡されたパラメタより短い文字列を返す場合: 渡されたパラメタより長い文字列を返す場合: 文字列域はスケルトンで自動的に解放されます。 |
out | - | CORBA-STRING-SET関数で領域獲得/文字列設定します。 |
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1". ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. SYMBOLIC CONSTANT COPY SYMBOL-CONST IN CORBA. . DATA DIVISION. WORKING-STORAGE SECTION. COPY CONST IN CORBA. 01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE. 01 STR-WORK PIC X(30). LINKAGE SECTION. * オブジェクトリファレンス 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. * inパラメタ 01 STR1 USAGE IS POINTER. * outパラメタ 01 STR2 USAGE IS POINTER. * inoutパラメタ 01 STR3 USAGE IS POINTER. 01 STR USAGE IS POINTER. * 例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. PROCEDURE DIVISION USING OBJ STR1 STR2 STR3 ENV STR. MAIN. * outパラメタの処理 MOVE "OUT" TO STR-WORK. MOVE 4 TO LSIZE. * outパラメタの設定 CALL "CORBA-STRING-SET" USING STR2 LSIZE STR-WORK. * inoutパラメタの処理 * クライアントから渡された領域の解放 CALL "CORBA-FREE" USING STR3. MOVE 8 TO LSIZE. * 出力パラメタの設定 MOVE "INOUT:2" TO STR-WORK. CALL "CORBA-STRING-SET" USING STR3 LSIZE STR-WORK. * 復帰値の処理 MOVE 7 TO LSIZE. * 復帰値の設定 MOVE "RETURN" TO STR-WORK. CALL "CORBA-STRING-SET" USING STR LSIZE STR-WORK. MAIN-END. END PROGRAM "ODSAMPLE-STRINGTEST-OP1".