Ren*_*ier 3 rpg rpgle ibm-midrange
AS400上的RPG
他们是一种定义可以被我的main函数中的函数访问的全局变量的方法吗?
例如,我有我的主要RPG程序(让我们称之为"MAIN_PROGRAM",在其中我称之为另一个RPG程序(让我们称之为SUB_PROGRAM).现在我想在我的MAIN_PROGRAM中定义一个字符串变量"ABC",然后在调用我的SUB_PROGRAM时在我的SUB_PROGRAM中使用变量.
我不想将它作为输入参数发送到SUB_PROGRAM的原因是我的MAIN_PROGRAM是用生成器(CA-PLEX)编译的......这给了我一个字符串大小为60 000的限制.我确实得到了绕过这个但不能将它传递给SUB_PROGRAM的方法,因为PLEX将它切断为60 000个字符.
我想要做的是创建一个可由SUB_PROGRAM引用的全局变量变量.
我是RPG编程的新手.我能够编辑程序的源代码,但我不知道是否可以创建全局变量或类似的东西.
您可以从服务程序导出变量,并将两个程序绑定到服务程序.您可以将变量导入程序.只要程序在同一个激活组中,并且服务程序是*CALLER,或者它位于同一个命名的激活组中,那么两个程序中的导入变量将访问服务程序中的相同导出变量.
您必须非常小心地定义所有IMPORT和EXPORT变量.这样做的方法是在/ copy文件中定义变量,如下所示:
dcl-s shared_variable varchar(1000000)
/if defined(do_export)
export
/else
import
/endif
;
Run Code Online (Sandbox Code Playgroud)
srvpgm模块源码:
ctl-opt nomain;
/define do_export
/copy copyfile
Run Code Online (Sandbox Code Playgroud)
该计划的来源:
/copy copyfile
shared_variable = 'abcde';
if shared_variabe = '12345';
...
Run Code Online (Sandbox Code Playgroud)
另一种方法是在没有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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
该计划的来源:
/copy copyfile
set_shared_variable ('abcde');
if get_shared_variable () = '12345';
...
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1166 次 |
最近记录: |