EGL データ型の C へのマッピング

下の表は、EGL プリミティブ型と C プリミティブ型を対応させたものです。 call ステートメントによって C 関数を呼び出す場合に、この表を使用します (call ステートメントでの C 関数の呼び出しを参照)。

表 1. EGL プリミティブと C プリミティブ
EGL プリミティブ C の型
INT int (符号付き 4 バイト整数)
SMALLINT short (符号付き 2 バイト整数)
BIGINT long long (符号付き 8 バイト整数)
NUM COBOL ゾーン・フォーマット。 ASCII の場合、正数の符号ビットは x30 になり、 負の数値の符号ビットは x70 になります。 EBCDIC の場合、正数の符号ビットは xF0 になり、 負の数値の符号ビットは xD0 です。
NUMC COBOL ゾーン・フォーマット。 ASCII の場合、正数の符号ビットは x30 になり、 負の数値の符号ビットは x70 になります。 EBCDIC の場合、正数の符号ビットは xC0 になり、 負の数値の符号ビットは xD0 になります。
DECIMAL、MONEY COBOL パック・フォーマット。 正数の符号ビットは xC になり、 負の数値の符号ビットは xD になります。
PACF COBOL パック・フォーマット。 正数の符号ビットは xF になり、 負の数値の符号ビットは xD になります。
FLOAT double
SMALLFLOAT float
BOOLEAN char。1 は TRUE を表し、0 は FALSE を表します。
HEX 符号なし char
CHAR char
MBCHAR、DBCHAR char。mbstowcs を使用して、stdlib.h を wchar_t に変換します。
UNICODE、STRING char。UTF-16 でエンコードされたデータ (1 文字につき 2 バイト) を持ちます。 mbstowcs を使用して、stdlib.h を wchar_t に変換します。Windows および Linux の場合、データの配列はリトル・エンディアンです。 その他のシステムの場合、データの配列はビッグ・エンディアンです。
DATE char。yyyMMdd 形式で、「0」から「9」までの数字が格納されます。
TIME char。HHmmss 形式で、「0」から「9」までの数字が格納されます。
TIMESTAMP char。「0」から「9」までの数字が格納されます。
INTERVAL char。「+」または「-」で始まり、「0」から「9」までの数字が 続きます。

テキスト型 (CHAR、MBCHAR、DBCHAR、UNICODE、STRING) の値、データ型および時刻型 (DATE、TIME、TIMESTAMP、および INTERVAL) の値、および HEX の値は、NULL バイトでは 終わりません。 StrLib.setNullTerminator を使用すると、末尾ブランクを NULL に変換できます。また、StrLib.setBlankTerminator を使用すると、 末尾 NULL をブランクに変換できます。

配列の場合は、以下のデータが、この順序で C 関数に渡されます。
  1. 配列の現在の長さを示す INT 値
  2. 配列の最大サイズを示す INT 値
  3. 配列内の各要素ごとに、以下のデータ。
    1. 要素が STRING またはレコードの場合は、要素のデータ長を示す INT 値
    2. 要素のデータ
    3. 要素が NULL 可能の場合、その要素の NULL 可能性を示す SHORT。 NULL 可能な要素が NULL 値を持っている場合、この SHORT の値は -1 になります。
    4. 要素が NULL 可能の場合、充てん文字の値として使用される SHORT。EGL では、この値は無視されます。
非構造化レコードの場合は、以下のデータが、この順序で C 関数に渡されます。
  1. フィールドの数を示す INT 値
  2. レコード内の各フィールドごとに、以下のデータ。
    1. フィールドのデータ長を示す INT 値
    2. フィールドのデータ
    3. フィールドが NULL 可能の場合、そのフィールドの NULL 可能性を示す SHORT。 NULL 可能なフィールドが NULL 値を持っている場合、この SHORT の値は -1 になります。
    4. 要素が NULL 可能の場合、充てん文字の値として使用される SHORT。EGL では、この値は無視されます。

構造化レコードの場合、EGL は最低レベルのフィールドのデータを渡します。 C の struct は、レコードと同じ構造で定義できます。


フィードバック