クライアント/サーバアプリケーションでパラメタ受渡しに使用するデータ型を以下に示します。
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 | bound | TEXT | TEXT | TEXT | TEXT |
unbound | STRING | STRING | STRING | STRING | |
wstring | bound | TEXT | TEXT | TEXT | TEXT |
unbound | STRING | STRING | STRING | STRING | |
any | BY REFERENCE | POINTER | POINTER | POINTER | |
sequence | BY REFERENCE | POINTER | POINTER | POINTER | |
struct | 固定長 | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE |
可変長 | BY REFERENCE | POINTER | POINTER | POINTER | |
union | 固定長 | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE |
可変長 | BY REFERENCE | POINTER | POINTER | POINTER | |
array(配列) | 固定長 | BY REFERENCE | BY REFERENCE | BY REFERENCE | BY REFERENCE |
可変長 | BY REFERENCE | POINTER | POINTER | POINTER | |
Object | BY REFERENCE | POINTER | POINTER | POINTER | |
TypeCode | BY REFERENCE | POINTER | POINTER | POINTER | |
注)POINTERは、POINTERがBY REFERENCEで渡されます。
TEXTは、COBOLの固定長テキストでNULL文字を含みません。
STRINGは、NULLで終わる可変長文字列のポインタです。
注意
サーバアプリケーションでのout/inoutパラメタ、復帰値、およびクライアントアプリケーションでのin/inoutパラメタでは、文字列型、シーケンス型、構造体、共用体、配列データ型でNULLポインタを設定できません。
固定長sequenceの場合、lengthにmaximumを超える値を設定した場合、システム例外が通知されます。また、固定長のsequenceの変数は以下のようにマッピングされます。
IDLファイル
module mod {
typedef sequence<long,10> seq_fix;
};COBOL
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MOD-SEQ-FIX.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.
02 FILLER OCCURS 10.
03 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-VALUE.可変長sequenceの場合、sequenceの変数は以下のようにマッピングされます。各要素にアクセスする場合、CORBA-SEQUENCE-ELEMENT-SET関数/CORBA-SEQUENCE-ELEMENT-GET関数を使用します。
IDLファイル
module mod {
typedef sequence<long> seq_val;
};COBOL
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MOD-SEQ-VAL.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-MAXIMUM.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY SEQ-LENGTH.
02 SEQ-BUFFER USAGE IS POINTER.arrayの場合、arrayの各要素は以下のようにマッピングされます。
IDLファイル
module mod {
typedef long S_array[2][3][4];
};COBOL
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MOD-S-ARRAY.
02 FILLER OCCURS 2.
03 FILLER OCCURS 3.
04 FILLER OCCURS 4.
05 COPY LONG IN CORBA REPLACING CORBA-LONG BY MOD-S-ARRAY-V.arrayの場合、例外処理は以下のようにマッピングされます。
IDLファイル
module mod {
exception foo {
long ex_val;
};
};COBOL
DATA DIVISION.
WORKING-STORAGE SECTION.
01 EX-MOD-FOO PIC X(15) VALUE "IDL:mod/foo:1.0".
01 MOD-FOO.
02 COPY LONG IN CORBA REPLACING CORBA-LONG BY EX-VAL.floatは、以下の構文で対応します。
[USAGE IS] [COMP-1] : 4 Byte
doubleは、以下の構文で対応します。
[USAGE IS] [COMP-2] : 8 Byte
constは、以下の構文で対応します。
OMG仕様
>> CONSTANT constant-name IS literal
COBOL仕様
SYMBOLIC CONSTANT
{ 記号定数-1 IS定数-1 }typedefは、以下の構文で対応します(基本型のみ)。
CORBA登録集として以下の定義を用意します(longの場合)。
long-type usage(local long type)/
ユーザは、COPY句でtypedefを使用します。
WORKING STORAGE SECTION.
:
01 COPY LONG IN CORBA
REPLACING long-type WITH ws--long-1
01 COPY LONG IN CORBA
REPLACING long-type WITH ws--long-2構造体などのtypedefは、COBOLで未サポートのため、使用できません。