Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第7章 アプリケーションの開発(COBOL) | > 7.9 データ型に対するマッピング |
IDL言語で文字列型stringを指定した場合、COBOLではPOINTERでデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
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 ORB IN CORBA REPLACING CORBA-ORB BY ORB. * 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 ORB STR1 STR2 STR3 ENV RET.
クライアントアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ |
サーバへ渡すパラメタ |
サーバから渡されたパラメタ |
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 ORB IN CORBA REPLACING CORBA-ORB BY ORB. 01 STR1 USAGE POINTER. 01 STR2 USAGE POINTER. 01 STR3 USAGE POINTER. 01 RET 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 STR2 LSIZE STR-WORK. CALL "ODSAMPLE-STRINGTEST-OP1" USING ORB 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.
サーバアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ |
クライアントから渡されたパラメタ |
クライアントへ渡すパラメタ |
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".
目次
索引
![]() ![]() |