Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第1部 アプリケーション開発(基本編) | > 第6章 アプリケーションの開発(COBOL) | > 6.8 データ型に対するマッピング |
IDL言語でワイド文字列型wstringを指定した場合、COBOLでは日本語項目、またはPOINTERでデータ宣言します。
以降では、以下のIDL定義例をもとに説明します。
typedef wstring<10> t_bound_wstring;
module ODsample{ //ワイド文字列(固定長) interface wstringtest{ t_bound_wstring op1(in t_bound_wstring str1, out t_bound_wstring str2, inout t_bound_wstring str3); }; }; module ODsample{ interface wstringtest{ wstring op1(in wstring str1, out wstring str2, inout wstring str3); }; };
* 文字列(固定長) IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-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 N(10). * outパラメタ 01 STR2 PIC N(10). * inoutパラメタ 01 STR3 PIC N(10). *例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. *復帰値 01 RET PIC N(10). PROCEDURE DIVISION. CALL "ODSAMPLE-WSTRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET. * 文字列(可変長) IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-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-WSTRINGTEST-OP1" USING OBJ STR1 STR2 STR3 ENV RET.
文字列(固定長)のパラメタ(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 N(10).
01 STR2 PIC N(10).
01 STR3 PIC N(10).
01 RET PIC N(10).
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY LSIZE.
PROCEDURE DIVISION.
* inパラメタの設定
MOVE N"イン" TO STR1.
* inoutパラメタの設定
MOVE N"インアウト" TO STR3.
CALL "ODSAMPLE-WSTRINGTEST-OP1" USING
ORB
STR1
STR2
STR3
ENV
RET.
クライアントアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ |
サーバへ渡すパラメタ |
サーバから渡されたパラメタ |
in |
CORBA-WSTRING-SET関数を使用して、文字列+終端文字'\0\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 N(30). PROCEDURE DIVISION. * inパラメタの設定 MOVE N"イン" TO STR-WORK. COMPUTE LSIZE = FUNCTION LENGTH(STR-WORK). CALL "CORBA-WSTRING-SET" USING STR1 LSIZE STR-WORK. * inoutパラメタの設定 MOVE N"インアウト" TO STR-WORK. COMPUTE LSIZE = FUNCTION LENGTH(STR-WORK). CALL "CORBA-WSTRING-SET" USING STR3 LSIZE STR-WORK. CALL "ODSAMPLE-WSTRINGTEST-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.
文字列(固定長)のパラメタ(in,out,inout)を扱う場合、領域の獲得/解放を行う必要はありません。データ域にデータを設定します。
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-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 N(30). LINKAGE SECTION. * オブジェクトリファレンス 01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ. * inパラメタ 01 STR1 PIC N(10). * outパラメタ 01 STR2 PIC N(10). * inoutパラメタ 01 STR3 PIC N(10). 01 STR PIC N(10). * 例外情報 01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV. PROCEDURE DIVISION USING OBJ STR1 STR2 STR3 ENV STR. MAIN. * outパラメタの処理 MOVE N"アウト" TO STR2. * inoutパラメタの処理 MOVE N"インアウト" TO STR3. * 復帰値の処理 MOVE N"リターン" TO STR. MAIN-END. END PROGRAM "ODSAMPLE-WSTRINGTEST-OP1".
サーバアプリケーションのパラメタの扱いについて、以下に示します。
パラメタ |
クライアントから渡されたパラメタ |
クライアントへ渡すパラメタ |
in |
文字列域はスケルトンで自動的に獲得/解放されます。 |
− |
inout |
文字列域はスケルトンで自動的に獲得されます。 |
渡されたパラメタより短い文字列を返す場合: 渡されたパラメタより長い文字列を返す場合: 文字列域はスケルトンで自動的に解放されます。 |
out |
− |
CORBA-WSTRING-SET関数で領域獲得/文字列設定します。 |
以下にサーバアプリケーションでの処理例を示します。
IDENTIFICATION DIVISION. PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-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 N(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 N"アウト" TO STR-WORK. COMPUTE LSIZE = FUNCTION LENGTH(STR-WORK). * outパラメタの設定 CALL "CORBA-WSTRING-SET" USING STR2 LSIZE STR-WORK. * inoutパラメタの処理 * クライアントから渡された領域の解放 CALL "CORBA-FREE" USING STR3. * 出力パラメタの設定 MOVE N"インアウト" TO STR-WORK. COMPUTE LSIZE = FUNCTION LENGTH(STR-WORK). CALL "CORBA-WSTRING-SET" USING STR3 LSIZE STR-WORK. * 復帰値の処理 MOVE N"リターン" TO STR-WORK. COMPUTE LSIZE = FUNCTION LENGTH(STR-WORK). * 復帰値の設定 CALL "CORBA-WSTRING-SET" USING STR LSIZE STR-WORK. MAIN-END. END PROGRAM "ODSAMPLE-WSTRINGTEST-OP1".
目次
索引
![]() ![]() |