COBOL2002 ユーザーズガイド
COBOL言語で使用できるJava言語のデータ型と,対応するCOBOLのデータ項目の型,およびC言語でのデータ型を,次に示します。
Javaの型 | 対応するCOBOLのデータ項目の型 | 対応するC言語のデータ型 | ||
---|---|---|---|---|
jboolean | -Bin1Byte 指定あり |
符号なし2進項目 (1〜2けた)※ |
9(1) COMP 〜 9(2) COMP |
Boolean |
-Bin1Byte 指定なし |
符号なし2進項目 (1〜2けた)※ |
9(1) COMP-X 〜 9(2) COMP-X |
||
jbyte | -Bin1Byte 指定あり |
符号付き2進項目 (1〜2けた) |
S9(1) COMP 〜 S9(2) COMP |
byte |
jchar | -Bin1Byte 指定あり |
符号なし2進項目 (3〜4けた) |
9(3) COMP 〜 9(4) COMP |
char |
-Bin1Byte 指定なし |
符号なし2進項目 (1〜4けた) |
9(1) COMP 〜 9(4) COMP |
||
符号なし2進項目 (3〜4けた) |
9(3) COMP-X 〜 9(4) COMP-X |
|||
jshort | -Bin1Byte 指定あり |
符号付き2進項目 (3〜4けた) |
S9(3) COMP 〜 S9(4) COMP |
short |
-Bin1Byte 指定なし |
符号付き2進項目 (1〜4けた) |
S9(1) COMP 〜 S9(4) COMP |
||
jint | − | 符号付き2進項目 (5〜9けた) |
S9(5) COMP 〜 S9(9) COMP | int |
jlong | − | 符号付き2進項目 (10〜18けた) |
S9(10) COMP 〜 S9(18) COMP | _int64 |
jfloat | − | 単精度内部浮動小数点数字項目 | COMP-1 | float |
jdouble | − | 倍精度内部浮動小数点数字項目 | COMP-2 | double |
また,次に示すJava言語でのデータ型は,COBOL言語で使用できません。
ただし文字列型は,C言語のサポート関数を作成すると,COBOLで使用できます。詳細は,「20.3.3 Java言語とCOBOL言語のデータ型の対応」の「(2) Javaの文字列型をCOBOLで使用する方法」を参照してください。
Javaの言語仕様上,文字列型はすべて Stringクラスのオブジェクトとなっています。そのため,JavaプログラムからCOBOLプログラムを呼び出した時,引数に文字列型を指定しても,COBOLプログラムでは文字列の内容を参照できません。
しかし,Java言語の他言語インタフェース機能(Java Native Interface)には,Java言語のStringオブジェクトをC言語の文字列型に変換できる機能があります。StringオブジェクトをC言語の文字列型に変換するCプログラムを作成し,COBOLプログラムから呼び出すと,COBOLプログラムでJava言語の文字列型を参照できます。
Cプログラムのサポート関数「jstring2string」を記述したCソースファイル「util.c」の例を次に示します。
#include <windows.h> #include <jni.h> /* JDKで使用できるインクルードファイル */ /* Java言語のStringオブジェクトをC言語の 文字列に変換する */ /* この関数はC言語の文字列での文字列長を返す */ int jstring2string (char *str, /* C言語の文字列を格納するバッファ */ int max, /* 格納するバッファのサイズ */ JNIEnv *env, /* Java実行時環境のポインタ */ jstring jstr) /* Java言語のString文字列 */ { const jchar *wstr; /* JavaNativeInterfaceの文字列変換機能を利用する */ /* ただし,この機能によって変換された文字列は Unicodeである */ wstr = (*env)->GetStringChars (env, jstr, 0); /* Unicode文字列をシフトJIS文字列に変換する */ WideCharToMultiByte (CP_ACP, 0, wstr, -1, str, max, NULL, NULL); /* 変換後の文字列の長さを返す */ return strlen (str); }
IDENTIFICATION DIVISION. PROGRAM-ID. 'Java_DLL_func'. DATA DIVISION. WORKING-STORAGE SECTION. 01 len PIC S9(9) USAGE COMP. 01 max PIC S9(9) USAGE COMP VALUE 1024. 01 str. 02 FILLER PIC X OCCURS 1024. LINKAGE SECTION. 01 JNIEnv ADDRESS. 01 jobject ADDRESS. 01 jstr ADDRESS. PROCEDURE DIVISION USING BY VALUE JNIEnv jobject jstr. CALL 'jstring2string' USING str BY VALUE max JNIEnv jstr RETURNING len. DISPLAY 'len: ' len. DISPLAY 'str: ' str(1:len). EXIT PROGRAM. END PROGRAM 'Java_DLL_func'.
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2002, 2011, Microsoft Corporation.