NOTICE: Our Community is moving. Get more information.
This example program demonstrates how C# can call a native COBOL program by using a managed COBOL wrapper program. The managed COBOL wrapper program is compiled with the ilsmartlinkage directive which causes the compiler to generate a .NET class for each item in the linkage section. This allows C# to create an instance on the parameter class and populate the individual elementary items of the COBOL record and to pass it to COBOL as a refrence parameter. The COBOL Runtime system will marshall the data correctly from managed COBOL to native COBOL so they can share the same record area in their linkage sections. In order to make things easy to find, both the managed wrapper and the native COBOL projects have their output folders set to be the same as the main C# project, testwrapper. In doing this all required executable files will be output to the same folder. A reference has also been added in the testwrapper project to point to the COBWrapper project so that Intellisense will work in C# for the COBOL classes. Run the C# project testwrapper by pressing F5 (or step into using F11). Fill the data fields on the form and then click the Call COBOL button. The C# Click event for the button will then create a new instance of the managed COBOL class and the parameter classes for LegacyRecord and LegacyStatus and will set these to the values in the form fields. testwrapper will then call COBWrapper and pass the parameters. COBWrapper will then turn around and call the native COBOL program using the same linkage section record that was passed by C#. The native COBOL program will then open a text file and write a record to it using the data that was passed in the linkage section. It will then set the LegacyStatus parameter to the value of the file status and return back to COBWrapper. COBWrapper then returns to testwrapper and the LegacyStatus is displayed back to the form.