Sam*_*uel 0 cobol ibm-midrange
我正在尝试从 cobol 程序中的 C 程序获取返回值。然而,他们提到了这一点:
“使用链接类型的程序调用的程序不允许使用 GIVING/RETURNING 短语。”
那么还有什么选择呢?如何在cobol程序中获取返回值?找不到。谢谢。-- 编辑我发现这个https://www.ibm.com/docs/en/rdfi/9.6.0?topic=SSAE4W_9.6.0/com.ibm.etools.iseries.ilecbl.doc/LNC2762.htm 他们表示“更改被调用程序的链接”,但我不知道该怎么做。
简短回答
IBM i 上的 ILE 程序不支持返回值。您需要使用输出参数。
长答案在检索作业信息 (QUSRJOBI) API
的 JOBI0600 格式中,在偏移量 108 处有一个 4 字节整数字段“用户返回代码”。
然而
文档说:
用户返回代码字段是作业中任何线程设置的最新返回代码。许多操作系统函数运行 C 代码并更改用户返回代码的值。该字段的更改有时会发生,用户编程无法预测或控制,即使作业是单线程的。要接收被调用程序返回的值,最好提供一个参数来接收该值,而不是依赖此作业范围的用户返回代码字段。
IBM 的 Barbara Morris,RPG 编译器开发团队的成员,在在线帖子中提到
操作系统必须将程序从调用堆栈中取出,如果它是*新程序,操作系统必须回收激活组。如果该工作的一部分涉及操作系统中的 C 或 C++ 程序,则可能会更改 ILE 返回代码。
正如您在编辑中提到的扩展答案 “更改链接”,我怀疑将 C 代码从 *PGM 对象移动到 *SRVPGM 对象(用于按引用绑定使用)或 *MODULE 对象(按副本绑定)。
ILE 过程(又名函数)可以返回值。
对于ILE C/C++调用C/C++ PGM
以下是ILE C/C++程序员指南中提到的..
extern "OS" int PGMNAME(void); 调用时返回的值是动态程序调用的返回码。如果被调用的程序是 C++ 程序,则可以使用头文件 <milib.h> 中定义的 _LANGUAGE_RETURN_CODE 宏来访问此返回代码。C++ 程序在 _LANGUAGE_RETURN_CODE 中返回四个字节。如果被调用的程序是 EPM 或 OPM 程序,则可以使用 iSeries 检索作业属性 (RTVJOBA) 命令访问此返回代码。
但我认为这对 COBOL 调用 C/C++ 没有帮助。
| 归档时间: |
|
| 查看次数: |
253 次 |
| 最近记录: |