Example: sample JCL for a procedural DLL application

The following example shows how to create an application that consists of a main program that calls a DLL subprogram.

A COBOL main program calling a COBOL DLL subprogram

The following example shows how to create an application that consists of a COBOL main program that calls a COBOL DLL subprogram.

The first step creates the DLL program object that contains the COBOL subprograms DemoDLLSubprogram and DemoDLLSub2. The second step creates the main program object that contains the COBOL program MainProgram. The third step runs the application.

//DLLSAMP  JOB ,                                                         
//  TIME=(1),MSGLEVEL=(1,1),MSGCLASS=H,CLASS=A,                          
//  NOTIFY=&SYSUID,USER=&SYSUID                                          
// SET LEPFX='SYS1'                                                      
//*--------------------------------------------------------------------- 
//* Compile COBOL subprogram, bind to form a DLL.                        
//*--------------------------------------------------------------------- 
//STEP1 EXEC IGYWCL,REGION=80M,GOPGM=DEMODLL,                            
//       PARM.COBOL='RENT,PGMN(LM),DLL,EXPORTALL',                       
//       PARM.LKED='RENT,LIST,XREF,LET,MAP,DYNAM(DLL),CASE(MIXED)'       
//COBOL.SYSIN    DD *                                                    
       Identification division.                                          
       Program-id. "DemoDLLSubprogram".                                  
       Procedure division.                                               
           Display "Hello from DemoDLLSubprogram!".                      
       End program "DemoDLLSubprogram".                                  
                                                                         
       Identification division.                                          
       Program-id. "DemoDLLSub2".                                        
       Procedure division.                                               
           Display "Hello from DemoDLLSub2!!".                           
       End program "DemoDLLSub2".                                        
/*                                                                       
//LKED.SYSDEFSD DD DSN=&&SIDEDECK,UNIT=SYSDA,DISP=(NEW,PASS),            
//             SPACE=(TRK,(1,1))                                         
//LKED.SYSLMOD   DD DSN=&&GOSET(&GOPGM),DSNTYPE=LIBRARY,DISP=(MOD,PASS)  
//LKED.SYSIN     DD DUMMY                                                
//*--------------------------------------------------------------------- 
//* Compile and bind COBOL main program                                  
//*--------------------------------------------------------------------- 
//STEP2 EXEC IGYWCL,REGION=80M,GOPGM=MAINPGM,                            
//       PARM.COBOL='RENT,PGMNAME(LM),DLL',                              
//       PARM.LKED='RENT,LIST,XREF,LET,MAP,DYNAM(DLL),CASE(MIXED)'       
//COBOL.SYSIN    DD *                                                    
       Identification division.                                          
       Program-id. "MainProgram".                                        
       Procedure division.                                               
           Call "DemoDLLSubprogram"                                      
           Call "DemoDLLSub2"                                            
           Stop Run.                                                     
       End program "MainProgram".                                        
/*                                                                       
//LKED.SYSIN    DD DSN=&&SIDEDECK,DISP=(OLD,DELETE)                      
//*--------------------------------------------------------------------- 
//* Execute the main program, calling the subprogram DLL.                
//*--------------------------------------------------------------------- 
//STEP3 EXEC PGM=MAINPGM,REGION=80M                                      
//STEPLIB DD DSN=&&GOSET,DISP=(OLD,DELETE)                               
//        DD DSN=&LEPFX..SCEERUN,DISP=SHR                                
//        DD DSN=&LEPFX..SCEERUN2,DISP=SHR                               
//SYSOUT  DD SYSOUT=*                                                    
//CEEDUMP DD SYSOUT=*

A COBOL main program calling a C DLL subprogram

The following example shows how to create an application that consists of a COBOL main program that calls a C DLL subprogram.

The first step creates the DLL program object that contains the C subprograms DemoDLLSubprogram and DemoDLLSub2. The second step creates the main program object that contains the COBOL program MainProgram. The third step runs the application.

//DLLSAMP  JOB ,                                               
//  TIME=(1),MSGLEVEL=(1,1),MSGCLASS=H,CLASS=A,                                 
//  NOTIFY=&SYSUID,USER=&SYSUID                                                 
// SET LEPFX='SYS1'                                                             
//*                                                                             
// JCLLIB ORDER=(CBC.SCCNPRC)       TO FIND EDCCL                               
//*---------------------------------------------------------------------        
//* Compile C subprogram, bind to form a DLL. 
//*--------------------------------------------------------------------- 
//STEP1 EXEC EDCCL,REGION=200M,GOPGM=DEMODLL,                                   
//       PARM.COMPILE='DLL,EXPORTALL,LIST',                                     
//       PARM.LKED='RENT,LIST,XREF,LET,MAP,DYNAM(DLL),CASE(MIXED)'              
//COMPILE.SYSIN    DD *                                                         
 #include<stdio.h>                                                              
 void DemoDLLSubprogram(){                                                      
   printf("Hello from DemoDLLSubprogram!\n");                                   
 }                                                                              
                                                                                
 void DemoDLLSub2(){                                                            
   printf("Hello from DemoDLLSub2!!\n");                                        
 }                                                                              
/*                                                                              
//LKED.SYSDEFSD DD DSN=&&SIDEDECK,UNIT=SYSDA,DISP=(NEW,PASS),                   
//             SPACE=(TRK,(1,1))                                                
//LKED.SYSLMOD   DD DSN=&&GOSET(&GOPGM),DSNTYPE=LIBRARY,DISP=(MOD,PASS)         
//LKED.SYSIN     DD DUMMY                                                       
//*---------------------------------------------------------------------        
//* Compile and bind COBOL main program                                         
//*---------------------------------------------------------------------        
//STEP2 EXEC IGYWCL,REGION=80M,GOPGM=MAINPGM,                                   
//       PARM.COBOL='RENT,PGMNAME(LM),DLL',                                     
//       PARM.LKED='RENT,LIST,XREF,LET,MAP,DYNAM(DLL),CASE(MIXED)'              
//COBOL.SYSIN    DD *                                                           
       Identification division.                                                 
       Program-id. "MainProgram".                                               
       Procedure division.                                                      
           Call "DemoDLLSubprogram"                                             
           Call "DemoDLLSub2"                                                   
           Stop Run.                                                            
       End program "MainProgram".                                               
/*                                                                              
//LKED.SYSIN    DD DSN=&&SIDEDECK,DISP=(OLD,DELETE)                             
//*---------------------------------------------------------------------        
//* Execute the main program, calling the subprogram DLL.                       
//*---------------------------------------------------------------------        
//STEP3 EXEC PGM=MAINPGM,REGION=80M                                             
//STEPLIB DD DSN=&&GOSET,DISP=(OLD,DELETE)                                      
//        DD DSN=&LEPFX..SCEERUN,DISP=SHR                                       
//        DD DSN=&LEPFX..SCEERUN2,DISP=SHR                                      
//SYSOUT  DD SYSOUT=*                                                           
//SYSPRINT DD SYSOUT=*                                                          
//CEEDUMP DD SYSOUT=*