请教老师:rpg调用c函数的问题
写一个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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
回复 7# q疯哥p
可以返回参数,我试了。c语言那函数可以有返回值啊
不过不知道怎么传指针过去,能否返回指针呢?这个问题没试过
回复 5# passthru
-----------------------------------
rpgle固定格式不能直接调用。
rpgle固定格式可以直接调用.
本帖最后由 q疯哥p 于 2011-04-21 15:38 编辑
哇哈哈
调用完了以后。。返回值怎么得到呢?
那个传人的参数,返回值是不变的啊。。。
另外,用void定义的C 函数,在rpgle自由格式下调用,可以无需callp键字,直接
i = RANDTST() ;
相当于rpgle的procedure定义:
p RANDTST b export
d RANDTST pi i
.....
rpgle固定格式不能直接调用。
可以了,谢谢各位!
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名),这样就可以使用了。
您吧:D RANDTST Pr ExtProc('RANDTST') 改成
D RANDTST Pr ExtProc(’LIJCCV‘) 试试