22.9.1 COBOLとC言語の連携
(1) CプログラムからCOBOLプログラムへ渡す場合
- Cプログラム側
int main(){ char DATABUF[50]; strncpy(DATABUF, "abcd", 5); SampleTP(DATABUF); :
- COBOLプログラム側
IDENTIFICATION DIVISION . PROGRAM-ID. 'SampleTP'. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DYNAMIC LENGTH STRUCTURE C-STRING IS C-STATIC-STRUCTURE . DATA DIVISION. LINKAGE SECTION. 01 DYNADATA PIC X DYNAMIC LENGTH C-STRING . PROCEDURE DIVISION USING DYNADATA . DISPLAY DYNADATA. *> 'abcd'が表示される
- 注意事項
-
-
DYNADATAをCOBOLプログラム側で更新してはならない。
-
DYNADATAの定義にLIMIT指定を行う場合は,そのサイズはCプログラム側で確保された領域のサイズ-1とすること(上記の例では,DATABUFのサイズ-1である49とする)。
-
(2) COBOLプログラムからCプログラムへ渡す場合
- COBOLプログラム側
ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DYNAMIC LENGTH STRUCTURE C-STRING IS C-STATIC-STRUCTURE . DATA DIVISION. WORKING-STORAGE SECTION. 01 DYNADATA PIC X DYNAMIC LENGTH C-STRING LIMIT 20 . PROCEDURE DIVISION . MOVE 'abcde' TO DYNADATA. *> DYNADATAには'abcde'+終端文字(X'00')が格納される CALL 'csub' USING DYNADATA.
- Cプログラム側
int csub(char *data1){ /* data1はCOBOL側のDYNAMDATAの領域を指す。 */ /* DYNAMDATA の実領域は21バイトであるが,末尾は終端文字であるため*/ /* data1に対する操作は20バイト以内で行うこと */ :