免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6045 | 回复: 11
打印 上一主题 下一主题

求教高手400中随机数问题-调用系统API srvpgm [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-18 17:25 |只看该作者 |倒序浏览
本帖最后由 穆-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.                              


求高手解释咋回事儿。。怎么搞能对。。。

论坛徽章:
0
2 [报告]
发表于 2011-03-18 17:33 |只看该作者
你call的那个是个Procedure还是program啊?

论坛徽章:
0
3 [报告]
发表于 2011-03-18 17:36 |只看该作者
我怀疑是你CALL的时候有问题,查下你用的时候,有没有把CALL和CALLP搞混
如果实在不行,就用STRDBG,跟CALL进去看下.

论坛徽章:
0
4 [报告]
发表于 2011-03-19 10:28 |只看该作者
用wrkobj *all/CEERANO*查看一下CEERANO的类型。如果CEERANO在libl下,并且type为*pgm,再查看权限。

从lz的说法中,T1用14可以编译通过,应该CEERANO *pgm存在。我想只有lz对CEERANO *pgm的执行权限问题了。

论坛徽章:
0
5 [报告]
发表于 2011-03-19 11:21 |只看该作者
用wrkobj *all/CEERANO*查看一下CEERANO的类型。如果CEERANO在libl下,并且type为*pgm,再查看权限。

从 ...
passthru 发表于 2011-03-19 10:28



   但是 如果是program的话 用CallP准确吗?不是应该用CALL吗?
  可以使用DSPOBJAUT命令查看该对象所有的权限列表。
  我也是新手,如果说得不对的,还请前辈多多拍砖!!!

论坛徽章:
0
6 [报告]
发表于 2011-03-19 19:11 |只看该作者
但是 如果是program的话 用CallP准确吗?不是应该用CALL吗?
  可以使用DSPOBJAUT命令查看该对象 ...
Kingmaple_Zhang 发表于 2011-03-19 11:21



    自由格式下,不能使用call键字。

   callp仅对PR定义的对象有效。callp对外部调用,如果PR定义为EXTPGM,在代码编译时,就会到libl下进行绑定。这就是lz说的14可以编译过。如果PR定义为EXTPROC,即callp是调用外部*module,这时程序源代码必须在H表中指定callp对象所在的binddir名,无论是这个module是通过srvpgm进行binddir装载,还是直接装载到binddir中。

论坛徽章:
0
7 [报告]
发表于 2011-03-19 19:23 |只看该作者
lz的帖子名,与内容不符。随机数的产生方法比较多。我认为,最简单的方法是用400 C语言的random()写一个用户定义函数。

这个贴子的名应该是“RPGIV调用外部*pgm,遇到的执行问题”。

论坛徽章:
0
8 [报告]
发表于 2011-03-19 23:08 |只看该作者
自由格式下,不能使用call键字。

   callp仅对PR定义的对象有效。callp对外部调用,如果PR定义 ...
passthru 发表于 2011-03-19 19:11



    受教,因为training的时候说我们公司不用free format,所以就没有去了解了。

论坛徽章:
0
9 [报告]
发表于 2011-03-21 10:27 |只看该作者
多谢各位我再试试。。。多谢

论坛徽章:
0
10 [报告]
发表于 2011-03-21 10:30 |只看该作者
这个CEERANO 是系统的api srvpgm 是QSYS/QLEMF 。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP