Natural subprograms can be invoked from a Natural object written in a 3rd generation
programming language (3GL). The invoking program can be written in any programming language
that supports a standard CALL
interface.
For this purpose, Natural provides the interface ncxr_callnat
. The
3GL program invokes this interface with a specification of the name of the desired
subprogram.
Note:
Natural must have been activated beforehand; that is, the invoking 3GL program must in
turn have been invoked by a Natural object with a CALL
statement.
The subprogram is executed as if it had been invoked from another Natural object with a
CALLNAT
statement.
When the processing of the subprogram stops (either with the END
statement or with an ESCAPE ROUTINE
statement),
control is returned to the 3GL program.
This document covers the following topics:
Parameters can be passed from the invoking 3GL program to the Natural subprogram. For
passing parameters, the same rules apply as for passing parameters with a CALL
statement.
The 3GL program invokes the Natural interface ncxr_callnat
with
four parameters:
The 1st parameter is the name of the Natural subprogram to be invoked.
The 2nd parameter contains the number of parameters to be passed to the subprogram.
The 3rd parameter contains the address of the table that contains the addresses of the parameters to be passed to the subprogram.
The 4th parameter contains the address of the table that contains the format/length specifications of the parameters to be passed to the subprogram.
The sequence, format and length of the parameters in the invoking program must match
exactly the sequence, format and length of the fields in the DEFINE DATA PARAMETER
statement
of the subprogram. The names of the fields in the invoking program and the invoked
subprogram can be different.
For an example of how to invoke a Natural subprogram from a 3GL program, refer to the following samples in <install-dir>/natural/samples/sysexuex.
MY3GL.NSP
(for the main program),
MY3GLSUB.NSN
(for the subprogram),
MYC3GL.C
(for the C
function).