クライアント/サーバアプリケーションでパラメタ受渡しに使用するデータ型を以下に示します。
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で未サポートのため使用できません。