将自变量从 ILE 程序传递到非 EPM 程序
将自变量传递到除 EPM 入口点以外的任何程序时,请使用以下约定:
- ILE C/C++ 程序调用的程序名必须为大写。 您可以在程序中使用 #pragma map 指令将长度超过 10 个字符的内部标识符映射为符合 IBM i 标准(10 个字符或更少)的对象名称。
- 可以通过声明程序以返回整数来检索程序调用的返回码。 例如:
图 1。 使用 #pragma 链接 (PGMNAME , OS) 伪指令来检索返回的函数结果的示例 int PGMNAME(void); #pragma linkage(PGMNAME, OS)注: ILE 源中的声明函数必须返回int或void。 不允许使用其他类型。在调用上返回的值是程序调用的返回码。 如果要调用的程序是 ILE 程序,那么也可以使用头文件
<milib.h>中定义的 _LANGUAGE_RETURN_CODE 宏来访问此返回码。 如果要调用的程序是 EPM 或 OPM 程序,请使用 "检索作业属性" (RTVJOBA) 命令来访问此返回码。 - 如果使用 #pragma linkage (PGMNAME, OS) 伪指令,那么编译器会将所有自变量 (指针和聚集除外) 复制到临时变量。 将指向临时变量的指针传递到被调用程序。 非指针参数由 value-reference 传递。值引用 (有时被称为 by value ,间接引用) 是指参数传递机制,其中:
- 将非指针值复制到临时变量,并传递临时变量的地址。 对被调用程序中的变量所作的更改不会反映在调用程序中。
- 如果要传递的自变量是聚集名称或指针,那么将直接传递该自变量,并且不会创建临时变量。 这意味着被调用的程序可以更改数组或指针引用的数据。
- 如果要通过引用传递参数,必须使用地址 (&) 操作符。
将自变量传递到 EPM 入口点时,请使用以下约定:
- 如果有 ILE C 程序调用 EPM 缺省入口点,那么在 ILE C 源中使用 #pragma linkage (PGMNAME, OS) 伪指令来告诉编译器 PGMNAME 是外部程序,而不是绑定的 ILE 过程。
- 如果有 ILE C 程序调用 EPM 非缺省入口点,那么必须使用 EPM API QPXXCALL。 QPXXCALL 还可用于调用 EPM 缺省入口点。 因为 QPXXCALL 是 OPM 程序,所以必须在 ILE C 源中使用 #pragma linkage (QPXXCALL, OS) 伪指令。