IBM AS/400 User Manual

Page of 489
 
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