求教高手400中随机数问题-调用系统API srvpgm
本帖最后由 穆-Mu 于 2011-03-21 10:31 编辑
小弟刚写了段代码如下
D CEERANO PR EXTPGM('CEERANO')
D P_SEED LIKE(I_SEED)
DP_RANDOM LIKE(F_RANDOM)
DI_SEED S 10I 0 INZ(0)
DF_RANDOM S 8F
DRNDNBR S 10I 0
DMAXNBR S 10I 0 INZ(4000)
DMINNBR S 10I 0 INZ(3000)
DI S 4 0
/free
FOR I = 1 BY 1 TO 11 ;
CALLP CEERANO(I_SEED:F_RANDOM);
RNDNBR = %DECH(F_RANDOM:30:29)*(MAXNBR-MINNBR)+MINNBR;
DSPLY RNDNBR ;
ENDFOR;
*inlr = *on;
return;
/end-free
代码从网上看的,14编译后没有错误,‘Program T1 placed in library XXXX. 00 highest severity. Created on 03/18/11’
然后call 程序出现错误
Error occurred while calling program or procedure *LIBL/CEERANO (C G D F).
F1进去
如下
Message . . . . : Error occurred while calling program or procedure
*LIBL/CEERANO (C G D F).
Cause . . . . . : RPG procedure T1 in program XXXX/T1 at statement 17
attempted to call program or procedure *LIBL/CEERANO, but was unable to
access the program or procedure, the library, or a required service program.
If the name is *N, the call was a bound call by procedure pointer.
继续F10如下
4>> CALL PGM(T1)
Cannot resolve to object CEERANO. Type and Subtype X'0201' Authority
X'0000'.
Function check. MCH3401 unmonitored by T1 at statement 0000000017,
instruction X'0000'.
Error occurred while calling program or procedure *LIBL/CEERANO (C G D F).
Error occurred while calling program or procedure *LIBL/CEERANO (C G D F).
Library B_DETECTOR added to library list.
Library B_DETECTOR removed from library list.
求高手解释咋回事儿。。怎么搞能对。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
这个CEERANO 是系统的api srvpgm 是QSYS/QLEMF 。。。
多谢各位我再试试。。。多谢
受教,因为training的时候说我们公司不用free format,所以就没有去了解了。
lz的帖子名,与内容不符。随机数的产生方法比较多。我认为,最简单的方法是用400 C语言的random()写一个用户定义函数。
这个贴子的名应该是“RPGIV调用外部*pgm,遇到的执行问题”。
自由格式下,不能使用call键字。
callp仅对PR定义的对象有效。callp对外部调用,如果PR定义为EXTPGM,在代码编译时,就会到libl下进行绑定。这就是lz说的14可以编译过。如果PR定义为EXTPROC,即callp是调用外部*module,这时程序源代码必须在H表中指定callp对象所在的binddir名,无论是这个module是通过srvpgm进行binddir装载,还是直接装载到binddir中。
但是 如果是program的话 用CallP准确吗?不是应该用CALL吗?
可以使用DSPOBJAUT命令查看该对象所有的权限列表。
我也是新手,如果说得不对的,还请前辈多多拍砖!!!
用wrkobj *all/CEERANO*查看一下CEERANO的类型。如果CEERANO在libl下,并且type为*pgm,再查看权限。
从lz的说法中,T1用14可以编译通过,应该CEERANO *pgm存在。我想只有lz对CEERANO *pgm的执行权限问题了。
我怀疑是你CALL的时候有问题,查下你用的时候,有没有把CALL和CALLP搞混
如果实在不行,就用STRDBG,跟CALL进去看下.
你call的那个是个Procedure还是program啊?