Calling Another Program Containing a _DecimalT Class Template

You can make interlanguage calls and pass _DecimalT-class arguments to ILE RPG, ILE COBOL, and ILE C programs.

The following figure provides an ILE COBOL example.

Figure 1. Example of Calling an ILE COBOL Program from an ILE C++ Program and Passing a _DecimalT Class Template

The C++ program is:

// This program calls an ILE COBOL program
// and passes a bcd object.

#include <iostream.h>
#include <bcd.h>

extern "OS" void CBLPGM(_DecimalT<9,7>);

int main(void)
{
 _DecimalT<9,7> arg=__D("12.1234567");

//  Call an ILE COBOL program and pass a bcd object
//  to it.

 CBLPGM(arg);

 cout <<"The COBOL program was called and passed a bcd object"<<endl;
}
The ILE COBOL program is:
IDENTIFICATION DIVISION.
PROGRAM-ID. CBLPGM.
***********************************************************************
*   Packed decimals:   This is going to be called by a C++            *
*   program to pass packed decimal data.                              *
*                                                                     *
***********************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.

SOURCE-COMPUTER. IBM-I.
OBJECT-COMPUTER. IBM-I.

INPUT-OUTPUT SECTION.
FILE-CONTROL.

DATA DIVISION.
FILE SECTION.

WORKING-STORAGE SECTION.
77  PAC-DATA                      PIC X(30)
                                  VALUE "PROGRAM START".
77  PACK-IN-WS                    PIC 99.9999999.

LINKAGE SECTION.
01  PACK-DATA                     PIC 9(2)V9(7) PACKED-DECIMAL.

PROCEDURE DIVISION USING PACK-DATA.

MAIN-LINE SECTION.

MOVE PACK-DATA TO PACK-IN-WS.
DISPLAY "****  BCD OBJECT RECEIVED IS: " PACK-IN-WS.
GOBACK.
The output is:
**** BCD OBJECT RECEIVED IS: 12.1234567
The COBOL program was called and passed a bcd object