IBM AS/400 Frozen Dessert Maker User Manual


 
Using the Fixed-Form Call Operations
| For ILE C, declare the returned value as a struct with a subfield of type char.
| (The RPG return value can also be declared as a 3-digit unsigned integer,
| since that is the way that ILE C defines a 1-byte character.)
|
typedef struct
| {
| char c;
| } RPGCHAR;
| RPGCHAR RPGPROC(int i);
| void fn()
| {
| RPGCHAR ret;
| ret = RPGPROC(3);
| /* The returned character is ret.c */
| }
| 2. When passing parameters by value to or from ILE C of the following types:
| 1-byte character
| 2-byte integer or unsigned integer
| 4-byte float
| you may get incorrect results since ILE C assumes that these parameters are
| widened to 4-byte integer or unsigned integer or to 8-byte float.
| To correct this problem you can specify in your ILE C code that widening
| should not occur, or you can declare the parameters in RPG in the widened
| form. It is straightforward to correct short integers and short float in RPG by just
| defining the parameters as 4-byte integer or 8-byte float, but to handle passing
| 1-byte character values is more difficult. The following illustrates one way to
| handle this:
|
* This prototype and call might give incorrect results
| D proc PR
| D char1 1A VALUE
| C CALLP proc(character_parm)
| * Code this instead
| D proc PR
| D char1 10U 0 VALUE
| D cvtchar1 DS
| D cvtuns10 10U 0 INZ(0)
| D cvtchar1 1A OVERLAY(cvtuns10:4)
| C EVAL cvtchar1 = character_parm
| C CALLP proc(cvtuns10)
| 3. Using ILE C and other languages, you can declare pointers to teraspace
| memory. ILE C requires a special compile-time option to address this type of
| storage, but ILE RPG can always address this storage if compiled with a target
| release of V4R4M0 or later. For more information on pointers in teraspace, see
| the
ILE Concepts
, SC41-5606-03 publication.
Using the Fixed-Form Call Operations
You use the CALL (Call a Program) operation to make a program call and the
CALLB (Call a Bound Procedure) operation to make a procedure call to programs
or procedures that are not prototyped. The two call operations are very similar in
their syntax and their use. To call a program or procedure, follow these general
steps:
1. Identify the object to be called in the Factor 2 entry.
148 ILE RPG for AS/400 Programmer's Guide