C에 EGL 데이터 유형 맵핑

다음 테이블은 call 명령문으로 C 함수 호출에서 설명된 대로 call 명령문으로 C 함수를 호출하는 데 사용할 C 기본 유형에 EGL 기본 유형을 맞춥니다.

표 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이며, stdlib.h에서 mbstowcs를 사용하여 wchar_t로 변환
UNICODE, STRING char이며, UTF-16 인코딩의 데이터(문자당 2바이트)입니다. stdlib.h에서 mbstowcs를 사용하여 wchar_t로 변환하십시오. Windows 및 Linux에서 데이터의 순서가 리틀 엔디안(little-endian)입니다. 기타 시스템에서는 데이터의 순서가 빅 엔디안(big-endian)입니다.
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)과 16진의 값이 널 바이트로 끝나지 않습니다. StrLib.setNullTerminator를 사용하여 후미 공백을 널로 변환하거나 StrLib.setBlankTerminator를 사용하여 후미 널을 공백으로 변환할 수 있습니다.

어레이의 경우, C 함수에 전달된 데이터는 이 순서에서 다음과 같습니다.
  1. 어레이의 현재 길이를 나타내는 INT 값
  2. 어레이의 최대 크기를 나타내는 INT 값
  3. 어레이에 있는 각 요소의 다음과 같은 데이터:
    1. 요소가 STRING 또는 레코드인 경우 요소의 데이터 길이를 나타내는 INT 값
    2. 요소의 데이터
    3. 요소가 널 입력 가능인 경우 요소의 널 입력 가능을 나타내는 SHORT입니다. 요소가 널 입력 가능이고 널 값을 포함하는 경우 SHORT의 값은 -1입니다.
    4. 요소가 널 입력 가능인 경우 필러 값으로 SHORT를 사용합니다. EGL은 이 값을 무시합니다.
구조화되지 않은 레코드의 경우 C 함수에 전달된 데이터는 이 순서에서 다음과 같습니다.
  1. INT 값이며, 필드의 수를 나타냄
  2. 레코드에 있는 각 필드의 다음과 같은 데이터:
    1. 필드의 데이터 길이를 나타내는 INT 값
    2. 필드의 데이터
    3. 필드가 널 입력 가능인 경우 필드의 널 입력 가능을 나타내는 SHORT입니다. 필드가 널 입력 가능이고 널 값을 포함하는 경우 SHORT의 값은 -1입니다.
    4. 요소가 널 입력 가능인 경우 필러 값으로 SHORT를 사용합니다. EGL은 이 값을 무시합니다.

구조화된 레코드의 경우 EGL은 최하 레벨 필드의 데이터를 전달합니다. 레코드와 동일한 구조의 C struct를 정의할 수 있습니다.