如何在 rpg 程序中定义一个可以在调用函数中访问的全局变量
How do you define a global variable in a rpg Program that can be accessed in calling functions
AS400 上的角色扮演游戏
它们是否是一种定义全局变量的方法,可以由我的主函数中的函数访问?
例如,我有我的主要 rpg 程序(让我们称之为 "MAIN_PROGRAM",在它里面我调用另一个 RPG 程序(让我们称之为 SUB_PROGRAM)。现在我想定义一个字符串变量 "ABC" 在我的 MAIN_PROGRAM 中,然后在调用我的 SUB_PROGRAM 时使用我的 SUB_PROGRAM.
中的变量
我不想将它作为输入参数发送到 SUB_PROGRAM 的原因是我的 MAIN_PROGRAM 是用生成器 (CA-PLEX) 编译的...这给了我字符串大小的限制为 60 000。我确实找到了解决此问题的方法,但无法将其传递给 SUB_PROGRAM,因为 PLEX 会在 60 000 个字符处将其切断。
我想做的是创建一个可以被 SUB_PROGRAM 引用的全局可变变量。
我是 RPG 编程新手。我可以编辑程序的源代码,但我不知道是否可以创建全局变量或类似的东西。
两个程序之间?编号
在绑定到同一个 *PGM(或 *SRVPGM)对象的两个模块之间,您可以在变量 d-spec 上使用 EXPORT
和 IMPORT
关键字。
如果您必须将它们保留为程序,将数据作为外部数据区传递可能是您的最佳选择。
您使用的是什么版本的 Plex?我从 6.1 开始就没用过它...如果当前版本没有跟上 RPGLE 的步伐,我会感到有些惊讶。
如果您还没有,CA Plex / 2E community 是一个很好的帮助资源。
您可以从服务程序导出变量并将两个程序都绑定到服务程序。您会将变量导入程序。只要程序在同一个激活组中并且服务程序是*CALLER,或者它在同一个命名的激活组中,那么两个程序中的导入变量将访问服务程序中的相同导出变量。
您必须非常小心地定义所有相同的 IMPORT 和 EXPORT 变量。这样做的方法是在 /copy 文件中定义变量,如下所示:
dcl-s shared_variable varchar(1000000)
/if defined(do_export)
export
/else
import
/endif
;
srvpgm 模块来源:
ctl-opt nomain;
/define do_export
/copy copyfile
程序来源:
/copy copyfile
shared_variable = 'abcde';
if shared_variabe = '12345';
...
另一种方法是在服务程序中定义变量,不带EXPORT关键字,使用程序获取和设置值。这似乎比使用 IMPORT/EXPORT 更复杂,但在长 运行 中它可能更容易,因为使用 IMPORT/EXPORT 共享变量导致的问题可能很难调试。例如,如果您不希望变量在明确设置为某个值之前被使用,您的 "get" 过程可以处理该问题。
复制文件:
dcl-s shared_variable_t varchar(1000000);
dcl-pr set_shared_variable;
val like(shared_variable_t) const;
end-pr;
dcl-pr get_shared_variable like(shared_variable_t) end-pr;
Srvpgm 模块来源:
ctl-opt nomain;
/copy copyfile
dcl-s g_shared_variable like(shared_variable_t);
dcl-proc set_shared_variable export;
dcl-pi *n;
val like(shared_variable_t) const;
end-pi;
g_shared_variable = val;
end-proc;
程序来源:
/copy copyfile
set_shared_variable ('abcde');
if get_shared_variable () = '12345';
...
AS400 上的角色扮演游戏
它们是否是一种定义全局变量的方法,可以由我的主函数中的函数访问?
例如,我有我的主要 rpg 程序(让我们称之为 "MAIN_PROGRAM",在它里面我调用另一个 RPG 程序(让我们称之为 SUB_PROGRAM)。现在我想定义一个字符串变量 "ABC" 在我的 MAIN_PROGRAM 中,然后在调用我的 SUB_PROGRAM 时使用我的 SUB_PROGRAM.
中的变量我不想将它作为输入参数发送到 SUB_PROGRAM 的原因是我的 MAIN_PROGRAM 是用生成器 (CA-PLEX) 编译的...这给了我字符串大小的限制为 60 000。我确实找到了解决此问题的方法,但无法将其传递给 SUB_PROGRAM,因为 PLEX 会在 60 000 个字符处将其切断。
我想做的是创建一个可以被 SUB_PROGRAM 引用的全局可变变量。
我是 RPG 编程新手。我可以编辑程序的源代码,但我不知道是否可以创建全局变量或类似的东西。
两个程序之间?编号
在绑定到同一个 *PGM(或 *SRVPGM)对象的两个模块之间,您可以在变量 d-spec 上使用 EXPORT
和 IMPORT
关键字。
如果您必须将它们保留为程序,将数据作为外部数据区传递可能是您的最佳选择。
您使用的是什么版本的 Plex?我从 6.1 开始就没用过它...如果当前版本没有跟上 RPGLE 的步伐,我会感到有些惊讶。
如果您还没有,CA Plex / 2E community 是一个很好的帮助资源。
您可以从服务程序导出变量并将两个程序都绑定到服务程序。您会将变量导入程序。只要程序在同一个激活组中并且服务程序是*CALLER,或者它在同一个命名的激活组中,那么两个程序中的导入变量将访问服务程序中的相同导出变量。
您必须非常小心地定义所有相同的 IMPORT 和 EXPORT 变量。这样做的方法是在 /copy 文件中定义变量,如下所示:
dcl-s shared_variable varchar(1000000)
/if defined(do_export)
export
/else
import
/endif
;
srvpgm 模块来源:
ctl-opt nomain;
/define do_export
/copy copyfile
程序来源:
/copy copyfile
shared_variable = 'abcde';
if shared_variabe = '12345';
...
另一种方法是在服务程序中定义变量,不带EXPORT关键字,使用程序获取和设置值。这似乎比使用 IMPORT/EXPORT 更复杂,但在长 运行 中它可能更容易,因为使用 IMPORT/EXPORT 共享变量导致的问题可能很难调试。例如,如果您不希望变量在明确设置为某个值之前被使用,您的 "get" 过程可以处理该问题。
复制文件:
dcl-s shared_variable_t varchar(1000000);
dcl-pr set_shared_variable;
val like(shared_variable_t) const;
end-pr;
dcl-pr get_shared_variable like(shared_variable_t) end-pr;
Srvpgm 模块来源:
ctl-opt nomain;
/copy copyfile
dcl-s g_shared_variable like(shared_variable_t);
dcl-proc set_shared_variable export;
dcl-pi *n;
val like(shared_variable_t) const;
end-pi;
g_shared_variable = val;
end-proc;
程序来源:
/copy copyfile
set_shared_variable ('abcde');
if get_shared_variable () = '12345';
...