请教老师:rpg调用c函数的问题

发布于 2022-08-28 12:43:28 字数 4751 浏览 12 评论 8

写一个c函数取0-100之间的随机数,然后在rpg中调用该c函数
c函数(RANDTST)源代码:
----------------------------------------------

#include <stdlib.h>                        
#include <time.h>                          
void LIJCCV (int Len)                     
{                                          
   int J ;                                 
   srand((unsigned) time(NULL)) ;         
   J = rand() % 100 ;                     
   Len = J ;                              
}                                          

----------------------------------------------
该c函数成功编译成*MODULE
rpg程序(USROPNE)源代码:
-----------------------------------------------

D RANDTST         Pr                  ExtProc('RANDTST')         
D Pr_Len                              Like(I)                     
D I               S              2  0 Inz                        
/Free                                                            
   Callp RANDTST(I) ;                                             
   *inlr = *on ;                                                  
   return ;                                                      
/End-Free                                                        
---------------------------------------------
USROPNE成功编译成*MODULE
然后把这两个*MODULE 生成pgm时失败,命令如下:
CRTPGM PGM(LIJLIB/RANDTST) MODULE(LIJLIB/RANDTST LIJLIB/USROPNE)
报错信息为:Definition not found for symbol 'RANDTST'.   
Message . . . . :   Definition not found for symbol 'RANDTST'.               
Cause . . . . . :   No definition was found for reference RANDTST in *MODULE
  object USROPNE in library TFLIJLIB. The definition either does not exist or
  is not of the same data or procedure type as the reference.               
Recovery  . . . :   Try the Create Program (CRTPGM) command again, supplying
  an object that contains a definition for symbol RANDTST.                  
--------------------------------------------------------------
然后我又做过两个rpg生成       *MODULE 在生成Pgm的测试,成功,rpg调用c时出错
请教老师 ,帮我解答

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

权谋诡计 2022-09-09 18:37:10

回复 7# q疯哥p

    可以返回参数,我试了。c语言那函数可以有返回值啊

不过不知道怎么传指针过去,能否返回指针呢?这个问题没试过

ゞ记忆︶ㄣ 2022-09-09 18:36:37

回复 5# passthru

-----------------------------------
    rpgle固定格式不能直接调用。

rpgle固定格式可以直接调用.

或十年 2022-09-09 18:36:19

本帖最后由 q疯哥p 于 2011-04-21 15:38 编辑

调用完了以后。。返回值怎么得到呢?
那个传人的参数,返回值是不变的啊。。。
ping222s 发表于 2011-04-17 22:29

    哇哈哈

尘世孤行 2022-09-09 18:35:05

调用完了以后。。返回值怎么得到呢?
那个传人的参数,返回值是不变的啊。。。

路还长,别太狂 2022-09-09 18:32:20

另外,用void定义的C 函数,在rpgle自由格式下调用,可以无需callp键字,直接

  i = RANDTST() ;

相当于rpgle的procedure定义:

p RANDTST         b          export
d RANDTST         pi         i
.....

rpgle固定格式不能直接调用。

眼眸 2022-09-09 18:13:19

可以了,谢谢各位!

独守阴晴ぅ圆缺 2022-09-09 16:59:36

void LIJCCV (int Len) 名改为RANDTST。相当于Pi定义中Pi与P B的名一样。

另外一个问题,用一个crtpgm把这两个*modules bind在一起,失去了RANDTST proc的通用性。建议用一个*srvpgm把RANDTST作为一个service挂起,这样通用性较好些。如果用*srvpgm挂起,需用一个binddir把这个*srvpgm挂起,然后在USROPNE rpgle程序中的H表加入H bnddir(binddir名),这样就可以使用了。

﹏半生如梦愿梦如真 2022-09-08 20:33:58

写一个c函数取0-100之间的随机数,然后在rpg中调用该c函数
c函数(RANDTST)源代码:
------------------ ...
roket 发表于 2010-05-25 15:29

    您吧:D RANDTST         Pr                  ExtProc('RANDTST')  改成
D RANDTST         Pr                  ExtProc(’LIJCCV‘)  试试

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文