全部博文(287)
分类: 其他UNIX
2013-12-17 12:16:09
问:()
我编写了Service Program如下:
Service Program Name:CBJSRVPGM.RPGLE---------------源码建于CBJSRC库,SRCTEST下,编译在CBJRUNSRC下
H NOMAIN
d/copy srcdfn,cbjsrvpgmi
DVDS_M1 DS
d/copy srcdfn,cmodule01i
DVDS_M2 DS
d/copy srcdfn,cmodule02i
*
P CBJSRV01Y B EXPORT
D CBJSRV01Y PI
D VDS_TM1 LIKE(VDS_M1)
*
*
C CALLB 'CMODULE01'
C PARM VDS_TM1
C RETURN
P CBJSRV01Y E
*
P CBJSRV02Y B EXPORT
D CBJSRV02Y PI
D VDS_TM2 LIKE(VDS_M2)
*
C CALLB 'CMODULE02'
C PARM VDS_TM2
C RETURN
P CBJSRV02Y E
CMODULE01和CMODULE02已经变异为MODULE----源码建于CBJSRC库,SRCTEST下,MODULE编译在CBJRUNSRC下
.BND文件(CBJSRVPGM.BND)-------源码在CBJSRC库,SRCTEST2下
STRPGMEXP SIGNATURE('CBJSRVPGM')
EXPORT SYMBOL(CBJSRV01Y)
EXPORT SYMBOL(CBJSRV02Y)
ENDPGMEXP
请各位指教,以上是否有问题。
我先将CBJSRVPGM.RPGLE变异为MODULE,然后再使用CRTSRVPGM命令创建服务程序,
请问该命令中各项如何填写
答:
首先,你的代码中有多处错误:
1) 如果把程序CBJSRVPGM.RPGLE作为服务程序,且你的代码是采用.BND定义模式,就应该在服务程序CBJSRVPGM中module定义,EXPORT SYMBOL(CBJSRVPGM),即自定义module;
2) 服务程序CBJSRVPGM代码中漏写了return操作码(因为你是采用nomain参数);
3) 看你的代码结构,因为module CBJSRV01Y、CBJSRV02Y都是与服务程序代码放在同一个module CBJSRVPGM代码中,无需在.BND文件再定义EXPORT SYMBOL(CBJSRV01Y)和EXPORT SYMBOL(CBJSRV02Y);
做好这些调整后,就可以生成服务程序CBJSRVPGM了:
Service program …CBJSRVPGM
Library …………… CBJSRC
Module ………………CBJSRVPGM
Library …………… CBJSRC
Export ……………….*SRCFILE
Export source file .. SRCTEST2
Library …………… CBJSRC
注意:命令执行后要查看joblog,日志。
改进的地方:
把服务程序外部调用程序CMODULE01和CMODULE02也生成module后,也用BND文件定义:
EXPORT SYMBOL(CMODULE01)
EXPORT SYMBOL(CMODULE02)
这样做的好处:一旦module CMODULE01,或module CMODULE02,变化重新生成,只做update服务程序CBJSRVPGM,相应的module CMODULE01,或module CMODULE02更新,而无需对*pgm CMODULE01或*pgm CMODULE02重新生成。
Good Luck,
Passthru