Calling Procedural COBOL from C#

Article Description  

In a previous article we discussed how to call procedural based COBOL programs from VB.NET.We had many requests to show how to do the same task in C#. So using the exact same COBOL modules as before we created a C# front-end that calls the COBOL modules.We won't repeat the entire article here but merely point out the significant differences to enabling the call to the procedural COBOL module. Here is the C# screen we created:

cs2cob01.jpg

C# coding

We will assume you are comfortable with the C# language. If you have any questions in this area please consult with one of your local C# experts.

Since the code we are calling is an Object Oriented COBOL module and the methods are static there is no additional coding that has to be added to the C# code to instantiate the COBOL class. Within the REFERENCEs for the C# project the user has to add  references to the COBOL interface program, the Fujitsu NetCOBOL environment and the modules the interface program will be calling.

cs2cob01a.jpg

NOTE: Even though the C# project is not calling the program that actually does the task we are looking for (ADDER in Project1) it still has to be included in the REFERENCEs.

To invoke the interface class that will in turn call the procedural COBOL program we use the "button_click" event. The code to enable this is:

cs2cob02.jpg

The sub routine first declares three variables of integer data type and then converts the input the user has entered  to INT16 (a numeric .NET data type) and stores them in the newly declared variables. The event then calls the method "ADDER" in the interface program. The method name is the same as the program name the interface will be calling. By using the same name for both the METHOD-ID and the procedural COBOL the programmer will  find this to be very easy to remember and if maintenance is required will know immediately where to go in the interface program to make the necessary changes.

Notice the presence of the 'ref' attribute on the variables being passed to the COBOL module. 'REF' instructs C# to work with the same variable as the one being used in the function call, not just a variable that has the same value. The only issue is when using 'REF' all variables must not only be declared but it must be initialized. Another method would be to use the 'OUT' parameter but this would then have required a change to the COBOL module to add the custom attribute 'OutAttribute' to the third parameter.

Wrap-Up

The ZIP file has all the necessary source code for you to follow along and see how the code is to be structured. One very important item to remind you of is the need to add in references to other projects when you are passing control between them. This is probably one of the most common errors when starting in the .NET environment.Once you get used to the environment though those issues will go away!

Happy Coding!