ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

G.2.5 データ型に対するマッピング

  CORBAのデータ型を扱うために、OOCOBOLでは以下の登録集を提供します。

  以下にデータ型のOOCOBOLでの定義を示します。

CORBAデータ型

OOCOBOLでの定義

備考

基本データ型

整数型

long

CORBA-LONG

PIC S9(9) COMP-5.

  

short

CORBA-SHORT

PIC S9(4) COMP-5.

  

unsigned long

CORBA-UNSIGNED-LONG

PIC 9(9) COMP-5.

  

unsigned short

CORBA-UNSIGNED-SHORT

PIC 9(4) COMP-5.

  

long long

CORBA-LONG-LONG

PIC S9(18) COMP-5.

  

浮動小数点型

float

CORBA-FLOAT

COMP-1.

  

double

CORBA-DOUBLE

COMP-2.

  

文字型

char

CORBA-CHAR

PIC X(1).

  

wchar

CORBA-WCHAR

PIC N(1).

  

オクテッド

octet

CORBA-OCTET

PIC X(1)

  

ブーリアン

boolean

CORBA-BOOLEAN

PIC 1(1)

  

文字列型

string

  

PIC X(n).
(サイズ指定あり)
クラス
(サイズ指定なし)

G.2.5.1 文字列型”参照

ワイド文字列型

wstring

  

PIC N(n).
(サイズ指定あり)
クラス
(サイズ指定なし)

G.2.5.2 ワイド文字列型”参照

列挙型

enum

CORBA-ENUM

PIC 9(9) COMP-5.

  

シーケンス型

sequence

  

クラス

G.2.5.3 シーケンス型”参照

構造体

struct

  

集団項目(固定長)
クラス(可変長)

G.2.5.4 構造体”参照

共用体

union

  

クラス

G.2.5.5 共用体”参照

固定小数点型

fixed

  

PIC xx(n) PACKD-DECIMAL.

G.2.5.6 固定小数点型”参照

オブジェクトリファレンス

Object

CORBA-OBJECT

OBJECT REFERENCE

  

タイプコード

TypeCode

CORBA-TYPECODE

OBJECT REFERENCE

  


G.2.5.1 文字列型

(1)IDLマッピング

  IDL言語で文字列型stringを指定した場合、以下のデータ型で宣言します。

  サイズ指定あり:  PIC X(n) 
  サイズ指定なし:  CORBA-STRINGクラス

  以降では、以下のIDL定義例をもとに説明します。

IDL言語
  module ODsample{
      interface  stringtest{
         string op1(in string str1, out string str2, inout string str3); 
      };
  };
OOCOBOL
   IDENTIFICATION DIVISION. 
   PROGRAM-ID. "ODSAMPLE-STRINGTEST-OP1".
  *
   ENVIRONMENT DIVISION. 
  *
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   COPY  CORBA--COPY.
   COPY  COSNAMING--COPY.
   COPY  SIMPLE--COPY.
   .
   01 OBJ  USAGE OBJECT REFERENCE CORBA-OBJECT.
  *inパラメタ
   01 STR1   PIC X(50). 
  *outパラメタ
   01 STR2   USAGE OBJECT REFERENCE CORBA-STRING.
  *inoutパラメタ
   01 STR3   USAGE OBJECT REFERENCE CORBA-STRING.
  *復帰値
   01 STR-RET  USAGE OBJECT REFERENCE CORBA-STRING.
  *
   PROCEDURE DIVISION. 
   INVOKE OBJ "ODSAMPLE-STRINGTEST-OP1" 
          USING  STR1
                 STR2
                 STR3
          RETURNING  STR-RET.

(2)クライアントアプリケーション例

  クライアントアプリケーションでは、文字列型のパラメタとして以下のデータ項目を使用します。

  inパラメタ    : PIC X(n) (サイズ指定あり)
  outパラメタ   : CORBA-STRING(クラス)
  inoutパラメタ : CORBA-STRING(クラス)
  復帰値        : CORBA-STRING(クラス)

  以下にクライアントアプリケーション例を以下に示します。

   IDENTIFICATION  DIVISION. 
   PROGRAM-ID.     "SIMPLE_C".
  *
   ENVIRONMENT     DIVISION. 
   CONFIGURATION   SECTION. 
   REPOSITORY. 
       COPY  CORBA--REP.
       COPY  SIMPLE--REP.
       . 
   SPECIAL-NAMES. 
       SYMBOLIC CONSTANT
       COPY  CORBA--CONST.
       COPY  SIMPLE--CONST.
       . 
  *
   DATA             DIVISION. 
   WORKING-STORAGE  SECTION. 
   COPY  CORBA--COPY.
   COPY  COSNAMING--COPY.
   COPY  SIMPLE--COPY.
  *inパラメタ
   01 STR1  PIC X(50). 
  *outパラメタ
   01 STR2  USAGE OBJECT REFERENCE CORBA-STRING.
  *inoutパラメタ
   01 STR3  USAGE OBJECT REFERENCE CORBA-STRING.
  *復帰値
   01 STR-RET  USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 OBJ         USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 TARGET-OBJ  USAGE OBJECT REFERENCE ODDEMO-STRINGTEST.
   01 STR-WORK    PIC X(50).
  *
   PROCEDURE DIVISION. 
  *inパラメタの設定
   MOVE    "IN" TO STR1. 
  * inoutパラメタの設定
   INVOKE  CORBA-STRING  "NEW" RETURNING STR3.
   INVOKE  STR3          "SET-VALUE" USING "INOUT".
  *
   INVOKE  ODSAMPLE-STRINGTEST "NARROW" 
           USING      OBJ
           RETURNING  TARGET-OBJ.
  *
   INVOKE  TARGET-OBJ "OP1" 
           USING  STR1
                  STR2
                  STR3
           RETURNING  STR-RET.
  *復帰値の参照
   INVOKE  STR-RET  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "RETURN : " STR-WORK.
  *outパラメタの参照
   INVOKE  STR2  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "OUT : " STR-WORK.
  *inoutパラメタの参照
   INVOKE  STR3  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "INOUT : " STR-WORK.
  END PROGRAM "SIMPLE_C".

G.2.5.2 ワイド文字列型

(1)IDLマッピング

  IDL言語でワイド文字列型wstringを指定した場合、以下のデータ型で宣言します。

  サイズ指定あり:  PIC N(n) 
  サイズ指定なし:  CORBA-WSTRINGクラス

  以降では、以下のIDL定義例をもとに説明します。

IDL言語
  module ODsample{
      interface  wstringtest{
         wstring op1(in wstring str1, out wstring str2, inout wstring str3); 
      };
  };
OOCOBOL
   IDENTIFICATION DIVISION. 
   PROGRAM-ID. "ODSAMPLE-WSTRINGTEST-OP1".
  *
   ENVIRONMENT DIVISION. 
  *
   DATA DIVISION. 
   WORKING-STORAGE SECTION. 
   COPY  CORBA--COPY.
   COPY  COSNAMING--COPY.
   COPY  SIMPLE--COPY.
   .
   01 OBJ  USAGE OBJECT REFERENCE CORBA-OBJECT.
  *inパラメタ
   01 STR1   PIC N(50). 
  *outパラメタ
   01 STR2   USAGE OBJECT REFERENCE CORBA-WSTRING.
  *inoutパラメタ
   01 STR3   USAGE OBJECT REFERENCE CORBA-WSTRING.
  *復帰値
   01 STR-RET  USAGE OBJECT REFERENCE CORBA-WSTRING.
  *
   PROCEDURE DIVISION. 
   INVOKE OBJ "ODSAMPLE-WSTRINGTEST-OP1" 
          USING  STR1
                 STR2
                 STR3
          RETURNING  STR-RET.

(2)クライアントアプリケーション例

  クライアントアプリケーションでは、ワイド文字列型のパラメタとして以下のデータ項目を使用します。

  inパラメタ    : PIC N(n) (サイズ指定あり)
  outパラメタ   : CORBA-WSTRING(クラス)
  inoutパラメタ : CORBA-WSTRING(クラス)
  復帰値        : CORBA-WSTRING(クラス)

  以下にクライアントアプリケーション例を以下に示します。

   IDENTIFICATION  DIVISION. 
   PROGRAM-ID.     "SIMPLE_C".
  *
   ENVIRONMENT     DIVISION. 
   CONFIGURATION   SECTION. 
   REPOSITORY. 
       COPY  CORBA--REP.
       COPY  SIMPLE--REP.
       . 
   SPECIAL-NAMES. 
       SYMBOLIC CONSTANT
       COPY  CORBA--CONST.
       COPY  SIMPLE--CONST.
       . 
  *
   DATA             DIVISION. 
   WORKING-STORAGE  SECTION. 
   COPY  CORBA--COPY.
   COPY  SIMPLE--COPY.
  *inパラメタ
   01 STR1  PIC N(50). 
  *outパラメタ
   01 STR2  USAGE OBJECT REFERENCE CORBA-WSTRING.
  *inoutパラメタ
   01 STR3  USAGE OBJECT REFERENCE CORBA-WSTRING.
  *復帰値
   01 STR-RET  USAGE OBJECT REFERENCE CORBA-WSTRING.
  *
   01 OBJ         USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 TARGET-OBJ  USAGE OBJECT REFERENCE ODDEMO-WSTRINGTEST.
   01 STR-WORK    PIC N(50).
  *
   PROCEDURE DIVISION. 
  *inパラメタの設定
   MOVE    N"イン" TO STR1. 
  * inoutパラメタの設定
   INVOKE  CORBA-WSTRING  "NEW" RETURNING STR3.
   INVOKE  STR3           "SET-VALUE" USING N"インアウト".
  *
   INVOKE  ODSAMPLE-WSTRINGTEST "NARROW" 
           USING      OBJ
           RETURNING  TARGET-OBJ.
  *
   INVOKE  TARGET-OBJ "OP1" 
           USING  STR1
                  STR2
                  STR3
           RETURNING  STR-RET.
  *復帰値の参照
   INVOKE  STR-RET  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "RETURN : " STR-WORK.
  *outパラメタの参照
   INVOKE  STR2  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "OUT : " STR-WORK.
  *inoutパラメタの参照
   INVOKE  STR3  "GET-VALUE" RETURNING STR-WORK.
   DISPLAY "INOUT : " STR-WORK.
  END PROGRAM "SIMPLE_C".

G.2.5.3 シーケンス型

(1) IDLマッピング

  IDL言語でシーケンス型sequenceを指定した場合、クラス(シーケンスクラス)でデータ宣言します。
  以降では、以下のIDL定義例をもとに説明します。

IDL言語

[ファイル名: simple.idl]

  module ODsample{
      interface  seqtest{
          typedef sequence<long>  sampleseq; 
          sampleseq op1(in sampleseq seq1, out sampleseq seq2, inout sampleseq seq3 ); 
          typedef sequence<string> sampleseq2; 
          sampleseq2 op2(in sampleseq2 seq1, out sampleseq2 seq2, inout sampleseq2 seq3 ); 
       };
  };
OOCOBOL

[ファイル名: simple--copy.cbl]

  * データ型宣言(typedef)
   01  ODSAMPLE-SEQTEST-SAMPLESEQ TYPEDEF OBJECT REFERENCE SEQUENCE-LONG.

[ファイル名: sequence-long.cob]

  * シーケンスクラス(sequence<long>)
   CLASS-ID. sequence-long AS "sequence-long" INHERITS SEQUENCEBASE.
  *
   FACTORY.
    PROCEDURE DIVISION.
  *
  * NEW-WITH-LENGTH METHOD
     METHOD-ID. NEW-WITH-LENGTH AS "NEW-WITH-LENGTH".
     DATA DIVISION.
     LINKAGE SECTION.
     COPY CORBA--COPY.
     01  0--SEQ-LENGTH TYPE CORBA-UNSIGNED-LONG.
     01  0--SEQ-OBJ OBJECT REFERENCE SELF.
     PROCEDURE DIVISION
       USING 0--SEQ-LENGTH RETURNING 0--SEQ-OBJ
       RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD NEW-WITH-LENGTH.
   END FACTORY.
  *
   OBJECT.
    PROCEDURE DIVISION.
  *
  * SEQ-MAXIMUM PROPERTY : GET
     METHOD-ID. GET PROPERTY SEQ-MAXIMUM.
     DATA DIVISION.
     LINKAGE SECTION.
     01 0--SEQ-MAXIMUM TYPE CORBA-UNSIGNED-LONG.
     PROCEDURE DIVISION RETURNING 0--SEQ-MAXIMUM.
       MOVE 0--MAXIMUM TO 0--SEQ-MAXIMUM.
     END METHOD.
  *
  * SEQ-LENGTH PROPERTY : GET
     METHOD-ID. GET PROPERTY SEQ-LENGTH.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--LENGTH-RESULT TYPE CORBA-UNSIGNED-LONG.
     PROCEDURE DIVISION RETURNING 0--LENGTH-RESULT.
       MOVE 0--LENGTH TO 0--LENGTH-RESULT.
     END METHOD.
  *
  * SEQ-LENGTH PROPERTY : SET
     METHOD-ID. SET PROPERTY SEQ-LENGTH.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--LENGTH-PARAM TYPE CORBA-UNSIGNED-LONG.
     PROCEDURE DIVISION USING 0--LENGTH-PARAM
       RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
  * GET-VALUE METHOD
     METHOD-ID. GET-VALUE AS "GET-VALUE".
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--ELEMS TYPE CORBA-UNSIGNED-LONG.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION USING 0--ELEMS RETURNING 0--VALUE.
     END METHOD GET-VALUE.
  *
  * SET-VALUE METHOD
     METHOD-ID. SET-VALUE AS "SET-VALUE".
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--ELEMS TYPE CORBA-UNSIGNED-LONG.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION USING 0--ELEMS 0--VALUE.
     END METHOD SET-VALUE.
  *
  * CLONE METHOD
     METHOD-ID. CLONE AS "CLONE".
     DATA DIVISION.
     LINKAGE SECTION.
     01 0--CLONE-OBJ OBJECT REFERENCE sequence-long.
     PROCEDURE DIVISION RETURNING 0--CLONE-OBJ
       RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD CLONE.
  *
   END OBJECT.
   END CLASS sequence-long.

  * シーケンスクラス(sequence<string>)
   CLASS-ID. sequence-string AS "sequence-string" INHERITS SEQUENCEBASE. 
  *
   FACTORY. 
    PROCEDURE DIVISION. 
  *
  * NEW-WITH-LENGTH METHOD
     METHOD-ID. NEW-WITH-LENGTH AS "NEW-WITH-LENGTH".
     DATA DIVISION. 
     LINKAGE SECTION. 
     COPY CORBA--COPY. 
     01  0--SEQ-LENGTH TYPE CORBA-UNSIGNED-LONG. 
     01  0--SEQ-OBJ OBJECT REFERENCE SELF. 
     PROCEDURE DIVISION
       USING 0--SEQ-LENGTH RETURNING 0--SEQ-OBJ
       RAISING CORBA-SYSTEMEXCEPTION. 
     END METHOD NEW-WITH-LENGTH. 
   END FACTORY. 
  *
   OBJECT. 
    PROCEDURE DIVISION. 
  *
  * SEQ-MAXIMUM PROPERTY : GET
     METHOD-ID. GET PROPERTY SEQ-MAXIMUM. 
     DATA DIVISION. 
     LINKAGE SECTION. 
     01 0--SEQ-MAXIMUM TYPE CORBA-UNSIGNED-LONG. 
     PROCEDURE DIVISION RETURNING 0--SEQ-MAXIMUM. 
       MOVE 0--MAXIMUM TO 0--SEQ-MAXIMUM. 
     END METHOD. 
  *
  * SEQ-LENGTH PROPERTY : GET
     METHOD-ID. GET PROPERTY SEQ-LENGTH. 
     DATA DIVISION. 
     LINKAGE SECTION. 
     01  0--LENGTH-RESULT TYPE CORBA-UNSIGNED-LONG. 
     PROCEDURE DIVISION RETURNING 0--LENGTH-RESULT. 
       MOVE 0--LENGTH TO 0--LENGTH-RESULT. 
     END METHOD. 
  *
  * SEQ-LENGTH PROPERTY : SET
     METHOD-ID. SET PROPERTY SEQ-LENGTH. 
     DATA DIVISION. 
     LINKAGE SECTION. 
     01  0--LENGTH-PARAM TYPE CORBA-UNSIGNED-LONG. 
     PROCEDURE DIVISION USING 0--LENGTH-PARAM
       RAISING CORBA-SYSTEMEXCEPTION. 
     END METHOD. 
  *
  * GET-VALUE METHOD
     METHOD-ID. GET-VALUE AS "GET-VALUE".
     DATA DIVISION. 
     LINKAGE SECTION. 
     01  0--ELEMS TYPE CORBA-UNSIGNED-LONG. 
     01  0--VALUE USAGE OBJECT REFERENCE CORBA-STRING. 
     PROCEDURE DIVISION USING 0--ELEMS RETURNING 0--VALUE. 
     END METHOD GET-VALUE. 
  *
  * SET-VALUE METHOD
     METHOD-ID. SET-VALUE AS "SET-VALUE".
     DATA DIVISION. 
     LINKAGE SECTION. 
     01  0--ELEMS TYPE CORBA-UNSIGNED-LONG. 
     01  0--VALUE USAGE OBJECT REFERENCE CORBA-STRING. 
     PROCEDURE DIVISION USING 0--ELEMS 0--VALUE. 
     END METHOD SET-VALUE. 
  *
  * CLONE METHOD
     METHOD-ID. CLONE AS "CLONE".
     DATA DIVISION. 
     LINKAGE SECTION. 
     01 0--CLONE-OBJ OBJECT REFERENCE sequence-string. 
     PROCEDURE DIVISION RETURNING 0--CLONE-OBJ
       RAISING CORBA-SYSTEMEXCEPTION. 
     END METHOD CLONE. 
  *
   END OBJECT. 
   END CLASS sequence-string. 

(2)シーケンスクラスのメソッド/プロパティ

  シーケンスクラスで定義されているメソッド/プロパティを以下に示します。

メソッド/プロパティ

機能

NEW-WITH-LENGTHメソッド

(ファクトリメソッド)指定の長さでシーケンスクラスを作成します。

GET-VALUEメソッド

(オブジェクトメソッド)指定番号の要素の値を取得します。

SET-VALUEメソッド

(オブジェクトメソッド)指定番号の要素に値を設定します。

CLONEメソッド

(オブジェクトメソッド)シーケンスクラスを複製します。

SEQ-MAXIMUMプロパティ

シーケンス最大長の値を取得します。

SEQ-LENGTHプロパティ

シーケンス長の値の取得/設定を行います。

  メソッド/プロパティの使用例を以下に示します。

  * NEW-WITH-LENGTHメソッド
  *   シーケンスクラスをSEQとして作成
   01  SEQ       USAGE OBJECT REFERENCE  SEQUENCE-LONG.
   01  SEQ-LEN   USAGE OBJECT REFERENCE  CORBA-UNSIGNED-LONG.
   INVOKE SEQUENCE-LONG "NEW-WITH-LENGTH"
          USING SEQ-LEN  RETURNING SEQ.
  * GET-VALUEメソッド
  *   1番目の要素の値をSEQ-GVALに取得
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-GVAL  TYPE  CORBA-LONG.
   INVOKE SEQ "GET-VALUE"  USING 1  RETURNING SEQ-GVAL.
  * SET-VALUEメソッド
  *   1番目の要素にSEQ-SVALを設定
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-SVAL  TYPE  CORBA-LONG.
   INVOKE SEQ "SET-VALUE"  USING 1 SEQ-SVAL.
  * CLONEメソッド
  *   シーケンスクラスをSEQ-CLONEとして複製
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-CLON  USAGE OBJECT REFERENCE SEQUENCE-LONG.
   INVOKE SEQ "CLONE"  RETURNING SEQ-CLON.
  * SEQ-MAXIMUMプロパティ
  *   シーケンス最大長の値をSEQ-MAXに取得
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-MAX   TYPE  CORBA-UNSIGNED-LONG.
   MOVE SEQ-MAXIMUM OF SEQ  TO SEQ-MAX.
  * SEQ-LENGTHプロパティ
  *   シーケンス長の値をSEQ-LENに取得
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-LEN   TYPE  CORBA-UNSIGNED-LONG.
   MOVE SEQ-LENGTH OF SEQ  TO SEQ-LEN.

  *  シーケンス長にSEQ-LENを設定
   01  SEQ       USAGE OBJECT REFERENCE SEQUENCE-LONG.
   01  SEQ-LEN   TYPE  CORBA-UNSIGNED-LONG.
   MOVE SEQ-LEN  TO SEQ-LENGTH OF SEQ.

(3)クライアントアプリケーション例

  クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-SEQTEST.
   01 RESULT              TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ.
   01 SEQ1                TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ.
   01 SEQ2                TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ.
   01 SEQ3                TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ.
   01 SEQ-VALUE           TYPE                   CORBA-LONG.
   01 OP2-RESULT          TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ2. 
   01 OP2-SEQ1            TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ2. 
   01 OP2-SEQ2            TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ2. 
   01 OP2-SEQ3            TYPE                   ODSAMPLE-SEQTEST-SAMPLESEQ2. 
   01 OP2-SEQ-VALUE       USAGE OBJECT REFERENCE CORBA-STRING. 
   01 I                   TYPE                   CORBA-UNSIGNED-LONG.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::seqtest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-SEQTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  sequence<long>
  *
  *  SET IN PARAMETER
       INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ1.
       MOVE 2 TO SEQ-LENGTH OF SEQ1.
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
         MOVE I TO SEQ-VALUE
         INVOKE SEQ1 "SET-VALUE" USING I SEQ-VALUE
       END-PERFORM.
  *
  *  SET INOUT PARAMETER
       INVOKE SEQUENCE-LONG "NEW" RETURNING SEQ3.
       MOVE 3 TO SEQ-LENGTH OF SEQ3.
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
         COMPUTE SEQ-VALUE = I * 10
         INVOKE SEQ3 "SET-VALUE" USING I SEQ-VALUE
       END-PERFORM.
  *
       MOVE "ODdemo::seqtest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     SEQ1
                                    SEQ2
                                    SEQ3
                          RETURNING RESULT.
  *
  *  sequence<string>
  *
  *  SET IN PARAMETER
       INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING OP2-SEQ1. 
       MOVE 2 TO SEQ-LENGTH OF OP2-SEQ1. 
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
         INVOKE CORBA-STRING "NEW-WITH-VALUE" USING     "TEST"
                                              RETURNING OP2-SEQ-VALUE
         INVOKE OP2-SEQ1 "SET-VALUE" USING I OP2-SEQ-VALUE
       END-PERFORM. 
  *
  *  SET INOUT PARAMETER
       INVOKE SEQUENCE-CORBA-STRING "NEW" RETURNING OP2-SEQ3. 
       MOVE 3 TO SEQ-LENGTH OF OP2-SEQ3. 
       PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
         INVOKE CORBA-STRING "NEW-WITH-VALUE" USING     "TEST"
                                              RETURNING OP2-SEQ-VALUE
         INVOKE OP2-SEQ3 "SET-VALUE" USING I OP2-SEQ-VALUE
       END-PERFORM. 
  *
       MOVE "ODdemo::seqtest::op2" TO API-NAME. 
       INVOKE TARGET-OBJ "OP2"
                          USING     OP2-SEQ1
                                    OP2-SEQ2
                                    OP2-SEQ3
                          RETURNING OP2-RESULT. 
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

G.2.5.4 構造体

(1)IDLマッピング

  IDL言語で構造体structを指定した場合、以下のデータ型で宣言します。

  構造体(固定長):  集団項目
  構造体(可変長):  クラス(構造体クラス)

  以降では、以下のIDL定義例をもとに説明します。

IDL言語

[ファイル名: simple.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 
          ); 
      };
  };
OOCOBOL

[ファイル名: simple--copy.cbl]

  * 集団項目(構造体(固定長)) 
   01  ODSAMPLE-SAMPLEFIX TYPEDEF.
       02  PARA1 TYPE CORBA-LONG.
       02  PARA2 TYPE CORBA-LONG.

[ファイル名: ODSAMPLE-SAMPLEVAR.COB]

  * 構造体クラス(構造体(可変長)) 
   CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
       INHERITS STRUCTBASE.
  *
   OBJECT.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    COPY CORBA--COPY.
  *
  * PROPERTY
    01  PARA1 TYPE CORBA-LONG PROPERTY.
    01  PARA2 OBJECT REFERENCE CORBA-STRING PROPERTY.
  *
    PROCEDURE DIVISION.
  *
  * CLONE METHOD
     METHOD-ID. CLONE AS "CLONE".
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
     PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
     END METHOD CLONE.
   END OBJECT.
   END CLASS ODSAMPLE-SAMPLEVAR.

(2)構造体クラスのメソッド/プロパティ

  構造体クラスで定義されているメソッド/プロパティを以下に示します。

メソッド/プロパティ

機能

CLONEメソッド

(オブジェクトメソッド)構造体クラスを複製します。

メンバプロパティ

メンバの値の取得/設定を行います。

  メソッド/プロパティの使用例を以下に示します。

  * CLONEメソッド
  *   構造体クラスをSTV-CLONとして複製
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-CLON  USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   INVOKE STV "CLONE"  RETURNING STV-CLON.
  * メンバプロパティ(クラス以外のデータ型)
  *   メンバPARA1の値をSTV-MEMTに取得
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMT  TYPE  CORBA-LONG.
   MOVE PARA1 OF STV  TO STV-MEMT.

  *   メンバPARA1にSTV-MEMTを設定
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMT  TYPE  CORBA-LONG.
   MOVE STV-MEMT  TO PARA1 OF STV.
  * メンバプロパティ(クラス)
  *   メンバPARA2の値をSTV-MEMCに取得
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET STV-MEMC  TO PARA2 OF STV.

  *   メンバPARA2にSTV-MEMCを設定
   01  STV       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  STV-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET PARA2 OF STV  TO STV-MEMC.

(3)クライアントアプリケーション例

  クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-STRUCTTEST.
   01 FIX0                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX1                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX2                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 FIX3                TYPE                   ODSAMPLE-SAMPLEFIX.
   01 VAR0                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR1                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR2                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR3                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 STR-WORK            USAGE OBJECT REFERENCE CORBA-STRING.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::structtest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-STRUCTTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  ODsample::samplefix
  *
  *  SET IN PARAMETER
       MOVE 10 TO PARA1 OF FIX1.
       MOVE 11 TO PARA2 OF FIX1.
  *
  *  SET INOUT PARAMETER
       MOVE 20 TO PARA1 OF FIX3.
       MOVE 21 TO PARA1 OF FIX3.
  *
       MOVE "ODdemo::structtest::op2" TO API-NAME.
       INVOKE TARGET-OBJ "OP2"
                          USING     FIX1
                                    FIX2
                                    FIX3
                          RETURNING FIX0.
  *
  *  ODsample::samplevar
  *
  *  SET IN PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR1.
       MOVE 5 TO PARA1 OF VAR1.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "test".
       SET PARA2 OF VAR1 TO STR-WORK.
  *
  *  SET INOUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
       MOVE 4 TO PARA1 OF VAR1.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "pro".
       SET PARA2 OF VAR3 TO STR-WORK.
  *
       MOVE "ODdemo::structtest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     VAR1
                                    VAR2
                                    VAR3
                          RETURNING VAR0.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

G.2.5.5 共用体

(1) IDLマッピング

  IDL言語で共用体unionを指定した場合、クラス(共用体クラス)でデータ宣言します。
  以降では、以下のIDL定義例をもとに説明します。

IDL言語

[ファイル名: simple.idl]

  module ODsample{
      union samplefix switch(long){    // 共用体(固定長) 
          case 1: long    para1; 
          case 2: long    para2; 
      };
      union samplevar switch(long){    // 共用体(可変長) 
          case 1: long    para1; 
          case 2: string  para2; 
      };
      interface  uniontest{
          samplefix  op2(
              in samplefix uni1, 
              out samplefix uni2, 
              inout samplefix uni3
          ); 
          samplevar  op1(
              in samplevar uni1, 
              out samplevar uni2, 
              inout samplevar uni3
          ); 
      };
  };
OOCOBOL

[ファイル名: ODSAMPLE-SAMPLEFIX.COB]

  * 共用体クラス(共用体(固定長)) 
   CLASS-ID. ODSAMPLE-SAMPLEFIX AS "ODSAMPLE-SAMPLEFIX"
       INHERITS UNIONBASE.
  *
   OBJECT.
    PROCEDURE DIVISION.
  *
  * DISCRIMINATOR PROPERTY : GET
     METHOD-ID. GET PROPERTY DISCRIMINATOR.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--RET-DISCRIMINATOR TYPE CORBA-LONG.
     PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
     END METHOD.
  *
  * MEMBER PROPERTY : GET
     METHOD-ID. GET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION RETURNING 0--VALUE
       RAISING CORBA-BAD_PARAM.
     END METHOD.
  *
  * MEMBER PROPERTY : SET
     METHOD-ID. SET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION USING 0--VALUE.
     END METHOD.
  *
  * MEMBER PROPERTY : GET
     METHOD-ID. GET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION RETURNING 0--VALUE
       RAISING CORBA-BAD_PARAM.
     END METHOD.
  *
  * MEMBER PROPERTY : SET
     METHOD-ID. SET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION USING 0--VALUE.
     END METHOD.
  *
  * CLONE METHOD
     METHOD-ID. CLONE AS "CLONE".
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
     PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
     END METHOD CLONE.
  *
   END OBJECT.
   END CLASS ODSAMPLE-SAMPLEFIX.

[ファイル名: ODSAMPLE-SAMPLEVAR.COB]

  * 共用体クラス(共用体(可変長)
   CLASS-ID. ODSAMPLE-SAMPLEVAR AS "ODSAMPLE-SAMPLEVAR"
       INHERITS UNIONBASE.
  *
   OBJECT.
    PROCEDURE DIVISION.
  *
  * DISCRIMINATOR PROPERTY : GET
     METHOD-ID. GET PROPERTY DISCRIMINATOR.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--RET-DISCRIMINATOR TYPE CORBA-LONG.
     PROCEDURE DIVISION RETURNING 0--RET-DISCRIMINATOR.
     END METHOD.
  *
  * MEMBER PROPERTY : GET
     METHOD-ID. GET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION RETURNING 0--VALUE
       RAISING CORBA-BAD_PARAM.
     END METHOD.
  *
  * MEMBER PROPERTY : SET
     METHOD-ID. SET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE TYPE CORBA-LONG.
     PROCEDURE DIVISION USING 0--VALUE.
     END METHOD.
  *
  * MEMBER PROPERTY : GET
     METHOD-ID. GET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE OBJECT REFERENCE CORBA-STRING.
     PROCEDURE DIVISION RETURNING 0--VALUE
       RAISING CORBA-BAD_PARAM.
     END METHOD.
  *
  * MEMBER PROPERTY : SET
     METHOD-ID. SET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--VALUE OBJECT REFERENCE CORBA-STRING.
     PROCEDURE DIVISION USING 0--VALUE.
     END METHOD.
  *
  * CLONE METHOD
     METHOD-ID. CLONE AS "CLONE".
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--CLONE-OBJ OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
     PROCEDURE DIVISION RETURNING 0--CLONE-OBJ.
     END METHOD CLONE.
  *
   END OBJECT.
   END CLASS ODSAMPLE-SAMPLEVAR.

(2)共用体クラスのメソッド/プロパティ

  共用体クラスで定義されているメソッド/プロパティを以下に示します。

メソッド/プロパティ

機能

CLONEメソッド

(オブジェクトメソッド)共用体クラスを複製します。

弁別子プロパティ

弁別子情報を取得します。

メンバプロパティ

メンバの値の取得/設定を行います。

  メソッド/プロパティの使用例を以下に示します。

  * CLONEメソッド
  *   共用体クラスをUNI-CLONとして複製
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-CLON  USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   INVOKE UNI "CLONE"  RETURNING UNI-CLON.
  * 弁別子プロパティ
  *   弁別子(DISCRIMINATOR)の値をUNI-MEMTに取得
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-DISC  TYPE  CORBA-LONG.
   MOVE DISCRIMINATOR OF UNI  TO UNI-DISC.
  * メンバプロパティ(クラス以外のデータ型)
  *   メンバPARA1の値をUNI-MEMTに取得
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-MEMT  TYPE  CORBA-LONG.
   MOVE PARA1 OF UNI  TO UNI-MEMT.

  *   メンバPARA1にUNI-MEMTを設定
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-MEMT  TYPE  CORBA-LONG.
   MOVE UNI-MEMT  TO PARA1 OF UNI.
  * メンバプロパティ(クラス)
  *   メンバPARA2の値をUNI-MEMCに取得
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET UNI-MEMC  TO PARA2 OF UNI.

  *   メンバPARA2にUNI-MEMCを設定
   01  UNI       USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01  UNI-MEMC  USAGE OBJECT REFERENCE CORBA-STRING.
   SET PARA2 OF UNI  TO UNI-MEMC.

(3)クライアントアプリケーション例

  クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-UNIONTEST.
   01 FIX0                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
   01 FIX1                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
   01 FIX2                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
   01 FIX3                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEFIX.
   01 VAR0                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR1                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR2                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 VAR3                USAGE OBJECT REFERENCE ODSAMPLE-SAMPLEVAR.
   01 STR-WORK            USAGE OBJECT REFERENCE CORBA-STRING.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::uniontest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-UNIONTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  ODsample::samplefix
  *
  *  SET IN PARAMETER
       INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX1.
       MOVE 10 TO PARA1 OF FIX1.
  *
  *  SET INOUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEFIX "NEW" RETURNING FIX3.
       MOVE 21 TO PARA2 OF FIX3.
  *
       MOVE "ODsample::uniontest::op2" TO API-NAME.
       INVOKE TARGET-OBJ "OP2"
                          USING     FIX1
                                    FIX2
                                    FIX3
                          RETURNING FIX0.
  *
  *  ODsample::samplevar
  *
  *  SET IN PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR1.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "Z".
       SET PARA2 OF VAR1 TO STR-WORK.
  *
  *  SET INOUT PARAMETER
       INVOKE ODSAMPLE-SAMPLEVAR "NEW" RETURNING VAR3.
       INVOKE CORBA-STRING "NEW" RETURNING STR-WORK.
       INVOKE STR-WORK "SET-VALUE" USING "y".
       SET PARA2 OF VAR3 TO STR-WORK.
  *
       MOVE "ODsample::uniontest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     VAR1
                                    VAR2
                                    VAR3
                          RETURNING VAR0.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

G.2.5.6 固定小数点型

(1)IDLマッピング

  IDL言語で固定小数点型fixedを指定した場合、数字項目(PICTURE句)でデータ宣言します。
  有効桁数と小数点位置による数字項目の定義形式を以下に示します。

IDL言語
  // fixed<digits,scale> とした場合 (digits=有効桁数,scale=小数点位置) 
  typedef fixed <10,2>  fixed1;    // digits > scale > 0 のとき
  typedef fixed <2,10>  fixed2;    // 0 < digits < scale のとき
  typedef fixed <10,10> fixed3;    // digits = scale のとき
  typedef fixed <10,0>  fixed4;    // scale = 0 のとき
  typedef fixed <10,-2> fixed5;    // scale < 0 のとき
OOCOBOL
   01 FIXED1 PIC S9(8)V9(2)  PACKED-DECIMAL. 
   01 FIXED2 PIC SVP(8)9(2)  PACKED-DECIMAL. 
   01 FIXED3 PIC SV9(10)     PACKED-DECIMAL. 
   01 FIXED4 PIC S9(10)      PACKED-DECIMAL. 
   01 FIXED5 PIC S9(10)P(2)  PACKED-DECIMAL. 

  以降では、以下のIDL定義例をもとに説明します。

IDL言語
  module ODsample {
      typedef fixed <10,3>  fixed0; 
      interface fixedtest { 
          fixed0  op1( 
              in       fixed <5,10>    fixed1, 
              out      fixed <10,-3>   fixed2, 
              inout    fixed <10,10>   fixed3 ); 
      }; 
  };
OOCOBOL
  * データ型宣言(固定小数点)
     01 FIXED0  PIC  S9(7)V9(3)  PACKED-DECIMAL.

(2)クライアントアプリケーション例

  クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-FIXEDTEST.
   01 FIXED0              TYPE ODSAMPLE-FIXED0.
   01 FIXED1              PIC SVP(5)9(5) PACKED-DECIMAL.
   01 FIXED2              PIC S9(10)P(3) PACKED-DECIMAL.
   01 FIXED3              PIC SV9(10)    PACKED-DECIMAL.
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::fixedtest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-FIXEDTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  ODsample::samplefix
  *
  *  SET IN PARAMETER
       MOVE 0.  23 TO FIXED1.
  *
  *  SET INOUT PARAMETER
       MOVE 0.  33 TO FIXED3.
  *
       MOVE "ODdemo::fixedtest::op1" TO API-NAME.
       INVOKE TARGET-OBJ "OP1"
                          USING     FIXED1
                                    FIXED2
                                    FIXED3
                          RETURNING FIXED0.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

G.2.5.7 属性宣言(attribute)のマッピング

(1) IDLマッピング

  IDL言語で属性宣言(attribute)を指定した場合、オブジェクトデータの取得/設定を行うプロパティ(プロパティ名はIDLで定義された変数名)が定義されます。
  以降では、以下のIDL定義例をもとに説明します。

IDL言語
  module ODsample{
          interface       attrtest{
                  attribute long  para1; 
                  attribute string para2; 
                  readonly attribute long para3; 
          };
  };
OOCOBOL
   CLASS-ID. ODSAMPLE-ATTRTEST AS "ODSAMPLE-ATTRTEST"
       INHERITS CORBA-OBJECT
       .
  *
   FACTORY.
    PROCEDURE DIVISION.
     METHOD-ID. NARROW AS "NARROW" PROTOTYPE.
     DATA DIVISION.
     LINKAGE SECTION.
     01 0--PARAM OBJECT REFERENCE CORBA-OBJECT.
     01 0--RESULT OBJECT REFERENCE SELF.
     PROCEDURE DIVISION
       USING 0--PARAM
       RETURNING 0--RESULT
       RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD NARROW.
   END FACTORY.
  *
   OBJECT.
    PROCEDURE DIVISION.
  *
     METHOD-ID. GET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--RESULT TYPE CORBA-LONG.
     PROCEDURE DIVISION
       RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
     METHOD-ID. SET PROPERTY PARA1.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--PARAM TYPE CORBA-LONG.
     PROCEDURE DIVISION
       USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
     METHOD-ID. GET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--RESULT OBJECT REFERENCE CORBA-STRING.
     PROCEDURE DIVISION
       RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
     METHOD-ID. SET PROPERTY PARA2.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--PARAM OBJECT REFERENCE CORBA-STRING.
     PROCEDURE DIVISION
       USING 0--PARAM RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
     METHOD-ID. GET PROPERTY PARA3.
     DATA DIVISION.
     LINKAGE SECTION.
     01  0--RESULT TYPE CORBA-LONG.
     PROCEDURE DIVISION
       RETURNING 0--RESULT RAISING CORBA-SYSTEMEXCEPTION.
     END METHOD.
  *
   END OBJECT.
   END CLASS ODSAMPLE-ATTRTEST.

(2)オブジェクトデータのプロパティ

  属性宣言により定義されるオブジェクトデータのプロパティを以下に示します。

プロパティ

機能

データプロパティ

オブジェクトデータの値の取得/設定を行います。

  プロパティの使用例を以下に示します。

  * データプロパティ(クラス以外のデータ型)
  *   PARA1の値をATTR-LONGへ取得
   01  ATTR      USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01  ATTR-LONG TYPE  CORBA-LONG.
   MOVE PARA1 OF ATTR  TO ATTR-LONG.

  *   PARA1にATTR-LONGを設定
   01  ATTR      USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01  ATTR-LONG TYPE  CORBA-LONG.
   MOVE ATTR-LONG  TO PARA1 OF ATTR.
  * データプロパティ(クラス)
  *   PARA2の値をATTR-STRへ取得
   01  ATTR      USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01  ATTR-STR  USAGE OBJECT REFERENCE CORBA-STRING.
   SET ATTR-STR  TO PARA2 OF ATTR.

  *   PARA2にATTR-STRを設定
   01  ATTR      USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01  ATTR-STR  USAGE OBJECT REFERENCE CORBA-STRING.
   SET PARA2 OF ATTR  TO ATTR-STR.
  * データプロパティ(readonly)
  *   PARA3の値をATTR-LONGへ取得
   01  ATTR      USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01  ATTR-LONG TYPE  CORBA-LONG.
   MOVE PARA3 OF ATTR  TO ATTR-LONG.

(3)クライアントアプリケーション例

  クライアントアプリケーション例を以下に示します。

   IDENTIFICATION         DIVISION.
   PROGRAM-ID.            "CLIENT-MAIN".
  *
   ENVIRONMENT            DIVISION.
   CONFIGURATION          SECTION.
   REPOSITORY.
       COPY               CORBA--REP.
       COPY               COSNAMING--REP.
       COPY               SIMPLE--REP.
       .
   SPECIAL-NAMES.
       SYMBOLIC CONSTANT
       COPY               CORBA--CONST.
       COPY               COSNAMING--CONST.
       COPY               SIMPLE--CONST.
       .
  *
   DATA                   DIVISION.
   WORKING-STORAGE        SECTION.
   COPY                   CORBA--COPY.
   COPY                   COSNAMING--COPY.
   COPY                   SIMPLE--COPY.
  *
   01 ORB                 USAGE OBJECT REFERENCE CORBA-ORB.
   01 OBJ                 USAGE OBJECT REFERENCE CORBA-OBJECT.
   01 NAMING-CONTEXT      USAGE OBJECT REFERENCE COSNAMING-NAMINGCONTEXT.
   01 NAME                TYPE                   COSNAMING-NAME.
   01 NAME-COMPONENT      USAGE OBJECT REFERENCE COSNAMING-NAMECOMPONENT.
   01 NAME-ID             USAGE OBJECT REFERENCE CORBA-STRING.
   01 NAME-KIND           USAGE OBJECT REFERENCE CORBA-STRING.
  *
   01 EXCEPTION-ID        USAGE OBJECT REFERENCE CORBA-STRING.
   01 EXCEPTION-ID-VALUE  PIC   X(50).
   01 API-NAME            PIC   X(50).
  *
   01 TARGET-OBJ          USAGE OBJECT REFERENCE ODSAMPLE-ATTRTEST.
   01 NUM                 TYPE                   CORBA-LONG.
   01 RET-NUM             TYPE                   CORBA-LONG.
   01 STR1                USAGE OBJECT REFERENCE CORBA-STRING.
   01 RET-STR1            USAGE OBJECT REFERENCE CORBA-STRING.
   01 RET-STR1-VALUE      PIC X(30).
  *
   PROCEDURE              DIVISION.
  *
   DECLARATIVES.
  *
   OTHER-ERROR SECTION.
       USE EXCEPTION CORBA-EXCEPTION.
       DISPLAY "CORBA::Exception: " API-NAME.
       SET EXCEPTION-ID TO IDL-ID OF EXCEPTION-OBJECT AS CORBA-EXCEPTION.
       INVOKE EXCEPTION-ID "GET-VALUE" RETURNING EXCEPTION-ID-VALUE.
       DISPLAY "   Exception-id: " EXCEPTION-ID-VALUE.
       EXIT PROGRAM.
   END-OTHER-ERR.
  *
   END DECLARATIVES.
  *
   MAIN SECTION.
  *
       MOVE "CORBA::ORB_init" TO API-NAME.
       INVOKE CORBA "ORB_INIT"
                          USING     "simple_c"
                                    FJ-OM_ORBID
                          RETURNING ORB.
  *
       MOVE "CORBA::ORB::resolve_initial_references" TO API-NAME.
       INVOKE ORB "RESOLVE_INITIAL_REFERENCES"
                          USING     CORBA-ORB-OBJECTID_NAMESERVICE
                          RETURNING OBJ.
  *
       INVOKE COSNAMING-NAMINGCONTEXT "NARROW"
                          USING     OBJ
                          RETURNING NAMING-CONTEXT.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     "ODsample::attrtest"
                          RETURNING NAME-ID.
  *
       INVOKE CORBA-STRING "NEW-WITH-VALUE"
                          USING     " "
                          RETURNING NAME-KIND.
  *
       INVOKE COSNAMING-NAMECOMPONENT "NEW"
                          RETURNING NAME-COMPONENT.
  *
       SET IDL-ID OF NAME-COMPONENT TO NAME-ID.
       SET KIND   OF NAME-COMPONENT TO NAME-KIND.
  *
       INVOKE SEQUENCE-NAMECOMPONENT-001 "NEW-WITH-LENGTH"
                          USING     1
                          RETURNING NAME.
  *
       INVOKE NAME "SET-VALUE"
                          USING     1
                                    NAME-COMPONENT.
  *
       MOVE "CosNaming::NamingContext::resolve" TO API-NAME.
       INVOKE NAMING-CONTEXT "RESOLVE"
                          USING     NAME
                          RETURNING OBJ.
  *
       INVOKE ODSAMPLE-ATTRTEST "NARROW"
                          USING     OBJ
                          RETURNING TARGET-OBJ.
  *
  *  para1(SET)
       MOVE 2 TO NUM.
       MOVE "ODsample::attrtest::para1(set)" TO API-NAME.
       MOVE NUM TO PARA1 OF TARGET-OBJ.
  *
  *  para1(GET)
       MOVE "ODsample::attrtest::para1(get)" TO API-NAME.
       MOVE PARA1 OF TARGET-OBJ TO RET-NUM.
       DISPLAY "ODsample::attrtest::para1 returns " RET-NUM.
  *
  *  para2(SET)
       INVOKE CORBA-STRING "NEW-WITH-VALUE" USING "test" RETURNING STR1.
       MOVE "ODsample::attrtest::para2(set)" TO API-NAME.
       SET PARA2 OF TARGET-OBJ TO STR1.
  *
  *  para2(GET)
       MOVE "ODsample::attrtest::para2(get)" TO API-NAME.
       SET RET-STR1 TO PARA2 OF TARGET-OBJ.
       INVOKE RET-STR1 "GET-VALUE" RETURNING RET-STR1-VALUE.
       DISPLAY "ODsample::attrtest::para2 returns " RET-STR1-VALUE.
  *
  *  para3(GET)
       MOVE "ODsample::attrtest::para3(get)" TO API-NAME.
       MOVE PARA3 OF TARGET-OBJ TO RET-NUM.
       DISPLAY "ODsample::attrtest::para3 returns " RET-NUM.
  *
       STOP RUN.
  *
   END-MAIN.
  *
   END PROGRAM "CLIENT-MAIN".

G.2.5.8 パラメタ受渡しで使用するデータ型

  クライアントアプリケーションでパラメタ受渡しに使用するデータ型(オペレーション宣言)を以下に示します。

CORBAデータ型

in

out

inout

復帰値

long

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

short

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

unsigned long

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

unsigned short

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

long long

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

float

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

double

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

char

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

wchar

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

octet

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

boolean

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

enum

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

string

サイズ指定あり

TEXT

TEXT

TEXT

TEXT

サイズ指定なし

TEXT

BY REFERENCE

BY REFERENCE

BY REFERENCE

wstring

サイズ指定あり

TEXT

TEXT

TEXT

TEXT

サイズ指定なし

TEXT

BY REFERENCE

BY REFERENCE

BY REFERENCE

sequence

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

struct

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

union

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

fixed

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

Object

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

TypeCode

BY REFERENCE

BY REFERENCE

BY REFERENCE

BY REFERENCE

) TEXTはOOCOBOLの固定長テキストでNULL文字を含みません。

  クライアントアプリケーションでパラメタ受渡しに使用するデータ型(属性宣言)を以下に示します。

CORBAデータ型

set

get

long

BY REFERENCE

BY REFERENCE

short

BY REFERENCE

BY REFERENCE

unsigned long

BY REFERENCE

BY REFERENCE

unsigned short

BY REFERENCE

BY REFERENCE

long long

BY REFERENCE

BY REFERENCE

float

BY REFERENCE

BY REFERENCE

double

BY REFERENCE

BY REFERENCE

char

BY REFERENCE

BY REFERENCE

wchar

BY REFERENCE

BY REFERENCE

octet

BY REFERENCE

BY REFERENCE

Boolean

BY REFERENCE

BY REFERENCE

enum

BY REFERENCE

BY REFERENCE

string

サイズ指定あり

TEXT

TEXT

サイズ指定なし

BY REFERENCE

BY REFERENCE

wstring

サイズ指定あり

TEXT

TEXT

サイズ指定なし

BY REFERENCE

BY REFERENCE

sequence

BY REFERENCE

BY REFERENCE

struct

BY REFERENCE

BY REFERENCE

union

BY REFERENCE

BY REFERENCE

fixed

BY REFERENCE

BY REFERENCE

Object

BY REFERENCE

BY REFERENCE

TypeCode

BY REFERENCE

BY REFERENCE

) TEXTはOOCOBOLの固定長テキストでNULL文字を含みません。

注意事項

(1)NULLポインタの設定について

  クライアントアプリケーションでのin,inoutパラメタでは、文字列型、シーケンス型、構造体、共用体でNULLオブジェクトを設定することができません。

(2)データ型の扱いについて

  固定長sequenceの場合、lengthにmaximumを超える値を設定した場合、maximumがlengthに設定されます。指定したlengthは無効になります。