Note: The following applies to .NET managed COBOL only.
You can use any existing COBOL program in a multiple user environment in .NET. Do this as follows:
- Create a COBOL class library project and add your procedural COBOL program to that project.
- Rebuild the project.
The COBOL program is now represented as a class that can be instantiated. It is packaged as a library (.dll); it is not compiled as an executable that can be run directly.
Whether the COBOL program to be called is procedural or OO COBOL, you need a program to call it, and this program can be in any .NET language, such as C# or COBOL. You need to:
- Create a project for the calling program, which can be more or less any project type, and add a reference to the:
- MicroFocus.COBOL.RuntimeServices assembly.
- MicroFocus.COBOL.Runtime assembly. You need this only if the calling program is in a .NET language other than COBOL.
- Project containing the COBOL class library that you want to call.
- In the calling program, create a run unit using the MicroFocus.COBOL.RuntimeServices.RunUnit constructor.
Use the Try ... Finally syntax to ensure that the program destroys the run unit if the program fails.
Either use the RunUnit.Call() method to call the COBOL class, or:
- Make sure that any parameters use .NET standard data types, and make sure that the called COBOL can receive these .NET standard data types.
- Create an instance of the procedural COBOL program to be called.
- Add the program instance to the new run unit, using the RunUnit.Add() method.
- Invoke the program instance within the new run unit.
Use the StopRun() method to destroy the run unit when you have finished with it.
Note:
- If the run unit causes a run-time error, a System.ApplicationException is thrown.
- In OO COBOL programs in a mixed language environment, be careful how you use static methods and data. Use static methods and data only where they need to be shared by all run units. In addition, ensure that data access is synchronized (as the run units will be executing in different threads).
For details of the RunUnit class in the
MicroFocus.COBOL.RuntimeServices assembly, see:
RunUnit Class.