全部博文(287)
分类: 系统运维
2011-06-16 12:35:27
RPGLE例子(二):BNDDIR>服务程序>Service:C 随机函数>随机数
要求:在数字1000000和数字5000000直接产生一个随机数。
步骤一、
TC.cle:(ile环境下C语言)
#include
#include
#include
extern int RANF(int start, int end)
{
int j, result;
srand((unsigned)time(NULL));
j = rand()%(end - start);
result = j+start;
return result;
}
这里TC的后缀必须是cle,或cpple,即ile环境下的语言后缀。
用CRTCMOD/CRTCPPMOD指定生成到MyLib下。
步骤二、
用RTVBNDSRC 命令在MyLib目录的QBNDSRC下,生成TC(BND)文件:
RTVBNDSRC MODULE(MyLib/TC)
SRCFILE(Mylib/QBNDSRC)
SRCMBR(TC)
生成结果,即TC(BND)文件的内容:
STRPGMEXP PGMLVL(*CURRENT)
/*********************************************************/
/* *MODULE TC MYLIB 11/06/15 17:09:04 */
/*********************************************************/
EXPORT SYMBOL("RANF")
ENDPGMEXP
步骤三、
用命令CRTSRVPGM生成服务程序TOOLS,*SRVPGM:
CRTSRVPGM SRVPGM(MYLIB/TOOLS)
MODULE(MYLIB/TC)
SRCFILE(MYLIB/QBNDSRC)
SRCMBR(TC)
步骤四、
用CRTBNDDIR生成MYLIB/BTEST BNDDIR:
CRTBNDDIR BNDDIR(MYLIB/BTEST)
加载:
ADDBNDDIRE BNDDIR(MYLIB/BTEST) OBJ((MYLIB/TOOLS))
步骤五、
测试程序TEST.rpgle:
H OPTION(*ShowCpy)
h DFTACTGRP(*NO)
H BNDDIR('BTEST')
*
d Randam pr 10i 0 extproc('RANF')
d s_Start 10i 0 value
d s_End 10i 0 value
*
d s_Start s 10i 0 inz(1000000)
d s_End s 10i 0 inz(5000000)
d s_Result s 10i 0 inz
/free
s_Result = Randam(s_Start:s_End) ;
*inlr = *on ;
return ;
/end-free
用选项14直接在MYLIB下生成TEST,*PGM。
注意地方:
1) C语言生成module,作为服务程序的一个service,C语言的后缀必须是CLE,或CPPLE。
2) C语言的原型接口是int时,调用程序rpgle的原型定义必须是10i 0。