因为在创建服务程序时必须指定export参数,而export的值可以为*SRCFILE, *ALL两种中的一种,所以创建srvpgm有两种方法:
1使用*all时在创建srvpgm时系统不需要进行严格的绑定语言的检查,表示多有语言都可以支持。
2使用*srcfile时需要在创建完module时在source_file下写一个bnd类型的绑定语言成员,然后在创建srvpgm时在SRCFILE和SRCmbr两个参数上指定bnd成员。这里创建绑定语言成员时一般包含以下的信息,
STRPGMEXP PGMLVL(*CURRENT/*prv)
EXPORT SYMBOL('模块名字')
ENDPGMEXP
例如:
srvpgm1:
说明:rpg1和rpg2是module,其中rpg2调用rpg1中的procedure。
rpg1建立procedure时需要将pro制定为export。
rpg2应用rpg1中的pro时需要制定为一个外部的pro,即使用关键字extproc('pro_name')
建立srvpgm时需要将export制定为*all,表示允许任何语言共同创建
CRTSRVPGM SRVPGM(HHHTEMP1/SRPG) MODULE(HHHTEMP1/RPG1 HHHTEMP1/RPG2) EXPORT(*ALL)
这里*all表示(All data and procedures that are exported from the specified modules are also exported from the service program.)
建立pgm时直接使用下面的命令:(这里的*dupproc表示系统回到所绑定的module中找出第一个和exproc('pro_name')中pro-name相对应的procedure)
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG)
OPTION(*DUPPROC)
例子
RPG1:
DP1 PR 2A
D 10A
D 10A
PP1 B EXPORT
DP1 PI 2A
DD1 10A
DD2 10A
DDD1 S 20A
C EVAL DD1=' 找到我了 '
C Dd1 DSPLY
C RETURN '99'
C EVAL *INLR='1'
PP1 E
rpg2:
0001.00 DP2 PR 2 EXTPROC('P1')
0001.01 D 10A
0001.02 D 10A
0001.03 D 2A
0006.04 DDD1 S 20A
0006.05 DD1 S 10A
0006.06 DD2 S 10A
0006.07 DD3 S 2A
0007.00 C
0008.00 C
0009.00 C EVAL D3=P2(D1:D2:D3)
0013.00 C
0014.00 C
0015.00 C
0016.00 C
0017.00 C EVAL *INLR='1'
然后将rpg1和rpg2编译成module
1。接着建立srvpgm:
CRTSRVPGM SRVPGM(HHHTEMP1/SRPG) MODULE(HHHTEMP1/RPG1 HHHTEMP1/RPG2) EXPORT(*ALL)
2。建立pgm:
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG)
OPTION(*DUPPROC)
rpg3:
DP2 PR 2 EXTPROC('P1')
D 10
D 10
DD1 S 10
DD2 S 10
DD3 S 2
C
C EVAL D3=P2(D1:D2)
C
C
C
C
C
C
C EVAL *INLR='1'
这里使用srvpgm中的p1 (procedure)
建立pgm
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG) OPTION(*DUPPROC)
SRVPGM2:
说明:rpg1和rpg2是module,其中rpg2调用rpg1中的procedure。
rpg1建立procedure时需要将pro制定为export。
rpg2应用rpg1中的pro时需要制定为一个外部的pro,即使用关键字extproc('pro_name')
建立srvpgm时需要将export指定为*srcfile,表示需要程序员自己定义一个绑定语言成员bnd1
CRTSRVPGM SRVPGM(HHHTEMP1/SRPG) MODULE(HHHTEMP1/RPG1 HHHTEMP1/RPG2) EXPORT(*srcfile) SRCFILE(hhhtemp1/qsrcfile) SRCMBR(BND1)
建立pgm时直接使用下面的命令:(这里的*dupproc表示系统回到所绑定的module中找出第一个和exproc('pro_name')中pro-name相对应的procedure)
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG)
OPTION(*DUPPROC)
例子
RPG1:
DP1 PR 2A
D 10A
D 10A
PP1 B EXPORT
DP1 PI 2A
DD1 10A
DD2 10A
DDD1 S 20A
C EVAL DD1=' 找到我了 '
C Dd1 DSPLY
C RETURN '99'
C EVAL *INLR='1'
PP1 E
rpg2:
0001.00 DP2 PR 2 EXTPROC('P1')
0001.01 D 10A
0001.02 D 10A
0001.03 D 2A
0006.04 DDD1 S 20A
0006.05 DD1 S 10A
0006.06 DD2 S 10A
0006.07 DD3 S 2A
0007.00 C
0008.00 C
0009.00 C EVAL D3=P2(D1:D2:D3)
0013.00 C
0014.00 C
0015.00 C
0016.00 C
0017.00 C EVAL *INLR='1'
然后将rpg1和rpg2编译成module
BND1:
STRPGMEXP PGMLVL(*CURRENT)
EXPORT SYMBOL('RPG1')
EXPORT SYMBOL('RPG2')
ENDPGMEXP
1。接着建立srvpgm:
CRTSRVPGM SRVPGM(HHHTEMP1/SRPG) MODULE(HHHTEMP1/RPG1 HHHTEMP1/RPG2) EXPORT(*srcfile) SRCFILE(hhhtemp1/qsrcfile) SRCMBR(BND1)
2。建立pgm:
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG)
OPTION(*DUPPROC)
rpg3:
DP2 PR 2 EXTPROC('P1')
D 10
D 10
DD1 S 10
DD2 S 10
DD3 S 2
C
C EVAL D3=P2(D1:D2)
C
C
C
C
C
C
C EVAL *INLR='1'
这里使用srvpgm中的p1 (procedure)
建立pgm
CRTPGM PGM(HHHTEMP1/RPG5) MODULE(HHHTEMP1/RPG3) BNDSRVPGM(HHHTEMP1/SRPG) OPTION(*DUPPROC)
阅读(2273) | 评论(0) | 转发(0) |