ILE C プログラムまたはプロシージャーへのデータの引き渡し

CALL...BY REFERENCE、CALL...BY VALUE、または CALL...BY CONTENT を使用することにより、 呼び出し先の ILE C プログラムまたはプロシージャーにデータを渡すことができます。 CALL...BY REFERENCE、CALL...BY VALUE、または CALL...BY CONTENT の使用の詳細については CALL...BY REFERENCE、BY VALUE、または BY CONTENT を使用したデータの受け渡しを参照してください。

CALL...BY REFERENCE を使用してデータを ILE C プログラムに渡すと、ILE C プログラムに受け入れられた引き数リストの中にデータ項目へのポインターが入れられます。

CALL...BY CONTENT を使用してデータを ILE C プログラムに渡すと、データ項目の値が一時ロケーションにコピーされ、コピーの一時ロケーションのアドレスを含むポインターは、ILE C プログラムに受け入れられた引き数リストに置かれます。

CALL...BY VALUE では、ILE C プログラムに受け入れられた引き数リストに、項目の値が入れられます。 CALL...BY VALUE は、ILE C プロシージャーを呼び出すのに使用できます。 しかし、ILE C プログラム・オブジェクトの呼び出しには使用できません。

ILE COBOL プログラムにおいて、ILE C プログラムまたはプロシージャーに渡したい引き数をデータ部に記述する方法は、 他のデータ項目をデータ部に記述するときの方法と同じです。 渡したい引き数の記述方法の詳細については プログラム間でのデータの受け渡しと共用を参照してください。

呼び出し先 ILE C プログラム・オブジェクトの実行が始まると、関数 main が自動的に呼び出されます。 各 ILE C プログラム・オブジェクトには、main という名前の関数が必ず 1 つ存在しなければなりません。 パラメーターを ILE C プログラム・オブジェクトに渡す場合、関数 main に 2 つのパラメーターを宣言する必要があります。 これらのパラメーターには任意の名前を付けることができますが、通常は argcargv を使います。 最初のパラメーター argc (引き数カウント) のタイプは int で、 これは ILE C プログラム・オブジェクトを呼び出した CALL ステートメントに引き数を何個指定したかを示すものです。 2 番目のパラメーター argv (引き数ベクトル) のデータ・タイプは、char 配列オブジェクトへのポインターの配列です。

argc の値は、配列 argv 内のポインターの数を示しています。 プログラム名が使用可能なら、argv の最初のエレメントは、 実行中の ILE C プログラムの呼び出し名のプログラム名を含む文字配列を指します。 argv の残りのエレメントには、呼び出し先 ILE C プログラムに渡されるパラメーターを指すポインターが入れられます。 最後のエレメント argv[argc] は、常に NULL です。

呼び出し先 ILE C プログラムまたはプロシージャーにパラメーターを記述する方法の詳細については、「WebSphere Development Studio: ILE C/C++ Programmer's Guide」を参照してください。

ILE C と ILE COBOL との間のデータ・タイプの互換性

ILE C と ILE COBOL のデータ・タイプは異なります。 ILE C で作成されたプログラムと ILE COBOL で作成されたプログラムとの間でデータを渡したい場合には、 このデータ・タイプの違いに注意する必要があります。 ILE C と ILE COBOL のデータ・タイプによっては、相手の言語に直接対応するものがない場合があります。

ILE C プログラムは常に、文字ストリングはヌル文字で終了していることを想定しています。ILE C プログラムに渡されるストリング・データがヌル終了されていることを確認してください。詳しくは、ヌル終了ストリングの操作を参照してください。

表 18 に ILE COBOL データ・タイプと ILE C データ・タイプの互換性を示します。

表 18. ILE COBOL と ILE C との間のデータ・タイプの互換性
ILE COBOL プロトタイプでの ILE C 宣言 長さ 説明
PIC X(n).
char[n]
または
char *
n n=1 〜 16,711,568 の文字フィールド。
FORMAT DATE リテラル char[6] 6 日付フィールド。
FORMAT TIME リテラル char[8] 8 時刻フィールド。
FORMAT TIMESTAMP char[n] 26 タイム・スタンプ・フィールド。
PIC G(n) char[2n] 2n グラフィック・フィールド。
PIC 1 INDIC .. char 1 標識。
PIC S9(n) DISPLAY char[n] n ゾーン 10 進数。
PIC S9(n-p)V9(p) COMP-3 decimal(n,p) n/2+1 パック 10 進数。
PIC S9(n-p)V9(p) PACKED-DECIMAL. decimal(n,p) n/2+1 パック 10 進数。
PIC S9(4) COMP-4. short int 2 -9999〜+9999 の 2 バイト符号付き整数。
PIC S9(4) BINARY. short int 2 -9999〜+9999 の 2 バイト符号付き整数。
PIC S9(9) COMP-4. int 4 -999999999〜+999999999 の 4 バイト符号付き整数。
PIC S9(9) BINARY. int 4 -999999999〜+999999999 の 4 バイト符号付き整数。
PIC S9(9) COMP-4. long int 4 -999999999〜+999999999 の 4 バイト符号付き整数。
PIC S9(9) BINARY. long int 4 -999999999〜+999999999 の 4 バイト符号付き整数。
PIC S9(18) COMP-4. long long 8 8 バイトの整数。
PIC S9(18) BINARY. long long 8 8 バイトの整数。
05 VL-FIELD.
  10 i PIC S9(4) COMP-4.
  10 data PIC X(n).
_Packed struct {short i; char[n]} n+2 可変長フィールド (i は指定した長さ、n は最大長)。
05 n PIC 9(9) COMP-4.
05 x redefines n PIC X(4).
struct {unsigned int : n}x; 4 ビット・フィールドは 16 進数リテラルを使用して操作可能。
01 record
  05 field1...
  05 field2...
struct n 構造体。 struct に _Packed 修飾子を使用。 構造体の内容を変更する場合、渡す構造は、構造体を指すポインターとして渡すことが必要。
USAGE IS POINTER * 16 ポインター。
PROCEDURE-POINTER 関数を指すポインター。 16 プロシージャーを指す 16 バイトのポインター。
USAGE IS INDEX int 4 4 バイトの整数。
REDEFINES union.element n 共用体のエレメント。
OCCURS data_type[n] n*(data_type の長さ) 配列。
USAGE IS COMP-1 float 4 4 バイトの浮動小数点数。
USAGE IS COMP-2 double 8 8 バイトの浮動小数点数。
サポートなし。 long double 8 8 バイトの long double。
サポートなし。 enum 1、2、4 列挙型
注:
どの COMP-4 および BINARY データ項目についても、 示されている範囲が適用されるのは、CRTCBLMOD または CRTBNDCBL のコマンドの OPTION パラメーターの *STDTRUNC 値が指定されているときだけです。 *NOSTDTRUNC を使用した場合、範囲の制限は適用されません。