Problem:
To run the RM/COBOL library routines provided in Visual COBOL, you set the DIALECT(RM) Compiler directive, which sets the required calling convention. To run the Visual COBOL library routines, you use the standard COBOL calling convention.
If you have RM/COBOL compatible library routines and Visual COBOL library routines in the same program this can be a problem because of the different calling conventions.
Resolution:
If you have RM/COBOL compatible library routines and Visual COBOL library routines in the same program, do one of the following:
• Set the DIALECT(RM) Compiler directive to enable the RM/COBOL library routines, then explicitly use the standard COBOL calling convention for the Visual COBOL library routines. For example :
$SET DIALECT(RM) IDENTIFICATION DIVISION. PROGRAM-ID. CTEST2. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION 0 IS Microsoft-c DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 ARG-1 PIC X(4). 01 ARG-2 PIC X(8). 01 ARG-3 PIC X(8). 01 ARG-4 PIC X(8). PROCEDURE DIVISION USING ARG-1 ARG-2 ARG-3 ARG-4. MAIN-LOGIC. CALL Microsoft-c "SYSTEM" USING ARG-1. CALL "C$getEnv" using ARG-1 ARG-2 ARG3.
• Explicitly use the 1024 calling convention for calls to the RM/COBOL compatible library routines if DIALECT(RM) is not set.
IDENTIFICATION DIVISION. PROGRAM-ID. CTEST2. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. CALL-CONVENTION 1024 IS RM. DATA DIVISION. WORKING-STORAGE SECTION. LINKAGE SECTION. 01 ARG-1 PIC X(4). 01 ARG-2 PIC X(8). 01 ARG-3 PIC X(8). 01 ARG-4 PIC X(8). PROCEDURE DIVISION USING ARG-1 ARG-2 ARG-3 ARG-4. MAIN-LOGIC. CALL "SYSTEM" USING ARG-1. CALL RM "C$getEnv" using ARG-1 ARG-2 ARG3.
NB : RM(GIVING) was deprecated in v2.1, is replaced by DIALECT(RM)
#rm
#COBOL
#Subroutine
#Libraries