COBOL2002 言語 拡張仕様編


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バイト以内で行うこと                    */
    :