| Eagle_wolf 回复于:2005-07-26 09:30:49
|
clp 中不可以 只能在clle中使用
|
| pure 回复于:2005-07-26 11:02:46
|
将SEU中的CLP改成了clle
仍然不行。。。
|
| Eagle_wolf 回复于:2005-07-26 11:16:59
|
seu中改什么意思?
type 改成clle后 提示的错误一样吗?
|
| qingzhou 回复于:2005-07-26 11:28:25
|
在CL中调用程序可以使用CALL,CALLB和CALLP三种方式,使用的区别如下:
1)CALL 调用OPM的老式RPG程序,采用动态内存调用方式。
2)CALLB 调用MODULE中的PEP(primary entry procedure),此procedure不需事先声明。
3)CALLP 调用MODULE中的procedure,此procedure必须在本程序的D specification事先声明,又称原形调用方式,和CALLB有相似的内存调用方式,但在调用之前会对调用参数进行预先检查。
目前ILE RPG中推荐使用CALLP调用内部、外部的procedure。
|
| Eagle_wolf 回复于:2005-07-26 11:33:35
|
[quote:d4ef3c7132="qingzhou"]在CL中调用程序可以使用CALL,CALLB和CALLP三种方式,使用的区别如下:
1)CALL 调用OPM的老式RPG程序,采用动态内存调用方式。
2)CALLB 调用MODULE中的PEP(primary entry procedure),此procedure不需事先声明?.........[/quote:d4ef3c7132]
cl中调用也可以这样吗? 这个不是rpgle的调用方式吗?
cl 执行的都是命令吧? 觉得应该是callprc
|
| pure 回复于:2005-07-26 16:25:16
|
[quote:87ad6010bf="Eagle_wolf"]seu中改什么意思?
type 改成clle后 提示的错误一样吗?[/quote:87ad6010bf]
没错。
|
| pure 回复于:2005-07-26 18:01:13
|
[quote:0a7fc762c5="qingzhou"]在CL中调用程序可以使用CALL,CALLB和CALLP三种方式,使用的区别如下:
1)CALL 调用OPM的老式RPG程序,采用动态内存调用方式。
2)CALLB 调用MODULE中的PEP(primary entry procedure),此procedure不需事先声明?.........[/quote:0a7fc762c5]
CALLP格式如何用?CL94版没有介绍
|
| Eagle_wolf 回复于:2005-07-26 18:07:07
|
strseu type(clle)
sndpgmmsg msg(begin)
callprc 按f4 提示cpd0031
Command CALLPRC not allowed in this setting.
是这个错误吗?
dspcmd callprc
Where allowed to run . . . . . . . . . : *IMOD *BMOD
指的就是callprc可以在cl-ile环境下运行
|
| pure 回复于:2005-07-28 12:25:17
|
TYPE为CLLE的程序:
MAIN: PGM
DCL &A *CHAR LEN(30) VALUE(DDDDDDDDD)
CALLPRC PRC(ABC)
SNDPGMMSG MSG(&A)
ENDPGM
ABC:PGM
DCL &A *CHAR 10
CHGVAR &A AAAAAAAA
ENDPGM
编译后报错:Program TEST not created.
查看编译报告,未发现异常,为什么呢?
|
| Eagle_wolf 回复于:2005-07-28 12:30:43
|
应该用crtclmod 之后在crtpgm
|
| pure 回复于:2005-07-28 13:29:14
|
我是在WRKMBRPDM中用14编译的
|
| Eagle_wolf 回复于:2005-07-28 13:33:39
|
应该用15 在crtpgm
|
| fairyboy 回复于:2005-07-28 23:18:31
|
先把这2个程序都编译成MODULE,再用CRTPGM里面把TEST为主MODULE,ABC为附加MODULE,试试!
|
| Eagle_wolf 回复于:2005-07-29 07:28:24
|
[quote:bfa68dcaf4="fairyboy"]先把这2个程序都编译成MODULE,再用CRTPGM里面把TEST为主MODULE,ABC为附加MODULE,试试![/quote:bfa68dcaf4]
编译ile程序 这个是正途
|
| pure 回复于:2005-07-29 11:03:54
|
试过,不行。
分别将两个程序段在两个文件中并命名为test1,test2
然后
crtclmod module(duan/test1) srcfile(duan/qclsrc) srcmbr(test1)
crtclmod module(duan/test2) srcfile(duan/qclsrc) srcmbr(test2)
都没问题,
再连接
crtpgm pgm(duan/testcl) module(duan/test1 duan/test2) entmod(duan/test1)
仍提示
Program TESTCL not created.
真郁闷啊~~~~~~
|
| Eagle_wolf 回复于:2005-07-29 11:05:17
|
为什么? 看joblog 和 splf
|
| pure 回复于:2005-07-29 11:39:48
|
dspjoblog:空
splf:未见异常
附编译报告(wrksplf)
5722SS1 V5R2M0 020719 Control Language DUAN/TEST1 07/29/05 09:57:42 Page 1
Module . . . . . . . . . . . . . . . . . . . : TEST1
Library . . . . . . . . . . . . . . . . . . : DUAN
Source file . . . . . . . . . . . . . . . . . : QCLSRC
Library . . . . . . . . . . . . . . . . . . : DUAN
Source member name . . . . . . . . . . . . . : TEST1 07/29/05 09:25:17
Source printing options . . . . . . . . . . . : *XREF *GEN *NOSECLVL *NOEVENTF
Module logging . . . . . . . . . . . . . . . : *JOB
Replace module object . . . . . . . . . . . . : *YES
Target release . . . . . . . . . . . . . . . : V5R2M0
Authority . . . . . . . . . . . . . . . . . . : *LIBCRTAUT
Sort sequence . . . . . . . . . . . . . . . . : *HEX
Language identifier . . . . . . . . . . . . . : *JOBRUN
Text . . . . . . . . . . . . . . . . . . . . :
Optimization . . . . . . . . . . . . . . . . : *NONE
Debugging view . . . . . . . . . . . . . . . : *STMT
Enable performance collection . . . . . . . . : *PEP
Compiler . . . . . . . . . . . . . . . . . . : IBM AS/400 Control Language Compiler
Control Language Source
SEQNBR *...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... 8 ...+... 9 ...+. DATE
6- 07/27/05
705- 07/22/05
706- ABC:PGM 07/27/05
707- DCL &A *CHAR 10 07/27/05
708- CHGVAR &A AAAAAAAA 07/27/05
709- ENDPGM 07/27/05
* * * * * E N D O F S O U R C E * * * * *
5722SS1 V5R2M0 020719 Control Language DUAN/TEST1 07/29/05 09:57:42 Page 2
Cross Reference
Declared Variables
Name Defined Type Length References
&A 707 *CHAR 10 708
Defined Labels
Label Defined References
ABC 706
* * * * * E N D O F C R O S S R E F E R E N C E * * * * *
5722SS1 V5R2M0 020719 Control Language DUAN/TEST1 07/29/05 09:57:42 Page 3
Message Summary
Severity
Total 0-9 10-19 20-29 30-39 40-49 50-59 60-69 70-79 80-89 90-99
0 0 0 0 0 0 0 0 0 0 0
Module TEST1 created in library DUAN on 07/29/05 at 09:57:42.
Module TEST1 created in library DUAN. Maximum error severity 00.
* * * * * E N D O F M E S S A G E S U M M A R Y * * * * *
* * * * * E N D O F C O M P I L A T I O N * * * * *
|
| Eagle_wolf 回复于:2005-07-29 12:03:31
|
在test1 not created 下面按f1 没消息?
|
| pure 回复于:2005-07-29 12:22:53
|
sorry!
分开放在两个PGM中是可以的!上述错误由我的疏忽引起~~~~
现在的问题是:
只在一个文件中
MAIN:PGM
DCL &A *CHAR LEN(30) VALUE(DDDDDDDDD)
CALLPRC PRC(TESTF) PARM(&A)
SNDPGMMSG MSG(&A)
ENDPGM
TESTF: PGM PARM(&C)
DCL &C *CHAR
CHGVAR &C AAAAAAAAAAA
ENDPGM
为何编译无误,但无法建立程序?DSPJOBLOG无内容(显示 3>> dspjoblog )
(我是用命令crtclmod,crtpgm建立的)
书上都有这种范例的~~~~~~~
|
| fairyboy 回复于:2005-07-29 13:18:03
|
你先分别把2个CLLE程序编译用15后,再直接在命令行输入下面的语句:
CRTPGM PGM(JUSTIN/TEST1) MODULE(JUSTIN/TESTF),去试试,不要用14去编译.
|
| pure 回复于:2005-07-29 14:21:46
|
我试过了,分开在两个文件中编译是没问题的。
我想在一个文件中实现,如上述,为什么不行呢?
书的范例都是在一个文件中的哦!
|
| xuguopeng 回复于:2005-07-29 14:25:26
|
什么一个文件两个文件的???不明白楼上的意思
|
| Eagle_wolf 回复于:2005-07-29 14:26:51
|
那个范例也看过 也试过但不行 刚刚找朋友在v5版本试了 也不行
endpgm的解释是cl 结束 当遇到endpgm后 就不会在编译了
在你编译的splf里会看到 只有main的信息 不会看到另一个pgm的信息
所以觉得一个member只能有一个
|
| xuguopeng 回复于:2005-07-29 14:28:16
|
一个MEMBER里写多个程序???不会吧 闻所未闻啊
|
| Eagle_wolf 回复于:2005-07-29 14:39:37
|
就是类似rpgle subprocedure的东西
cl里应该是不行了 没有export的类型命令
|
| xuguopeng 回复于:2005-07-29 15:00:10
|
CLP里是没有SUBROUTINE这个概念的 否则也就不用GOTO了。。。
|
| Eagle_wolf 回复于:2005-07-29 15:06:10
|
指的是clle
|
| fairyboy 回复于:2005-07-29 16:07:51
|
CLP里面就不能用CALLPRC这个概念
|
| xuguopeng 回复于:2005-07-29 16:45:58
|
不论是CLP还是CLLE都没有SUBROUTINE这个概念。。。我又没说要在CLP中用CALLPRC啊 没想到板砖这么多啊 - -!
CLLE比较不爽 不能用RTVCLSRC。。。。
|
| Eagle_wolf 回复于:2005-07-29 17:09:07
|
[quote:7467781aef="xuguopeng"]不论是CLP还是CLLE都没有SUBROUTINE这个概念。。。我又没说要在CLP中用CALLPRC啊 没想到板砖这么多啊 - -!
CLLE比较不爽 不能用RTVCLSRC。。。。[/quote:7467781aef]
有利有弊吗
|
| pure 回复于:2005-07-29 18:06:33
|
难道IBM在糊弄我们~~~~
CL书中源语句(不重要的部分省略)
MAIN: PGM PARM(&TEXT)/* 必须规定&TEXT,如果不规定结果不可预测 */
DCL VAR(&TEXT) TYPE(*CHAR) LEN(10)
CALLPRC PRC(PROC1) PARM('0')
CALLPRC PRC(PROC1) PARM('1' &TEXT)
CALLPRC PRC(PROC1) PARM('1''Goodbye')
ENDPGM
PROC1: PGM PARM(&P1 &P2)
DCL VAR(&P1) TYPE(*LGL)
DCL VAR(&P2) TYPE(*CHAR) LEN(10)
DCL VAR(&MSG) TYPE(*CHAR) LEN(10)
DCL VAR(&PARMPOS) TYPE(*CHAR) LEN(4)
IF COND(&P1) THEN(DO) /* 规定了Parm 2,用它作信息正文 */
CHGVAR VAR(%BIN(&PARMPOS 1 4)) VALUE(2) /* 告诉CEEDOD对第二个参
数要操作主字码 */
CALLPRC PRC(CEEDOD) PARM(&PARMPOS & PARMDESC +
&PARMTYPE &PARMINFO1 &PARMINFO2 &PARMLEN) +
/* 调用CEEDOD得到&P2的数据长度 */
SNDPGMMSG MSG(&MSG)
ENDPGM
-----------------
大家不要看这代码是干什么的,你看这里
CALLPRC PRC(PROC1) PARM('0')
它是可以在一个程序中调用子程序啊!
那它到底是CLP还是CLLE呢?
我试验过了CLP中CALLPRC无法编译;
CLLE中CALLPRC可以编译通过但无法建立PGM
上帝,为啥啊!!!!!!!
|
| Eagle_wolf 回复于:2005-07-29 18:15:01
|
也许它就是指两个member 嘿
要不去问ibm的牛人
要不放弃
|
| fairyboy 回复于:2005-07-29 20:26:27
|
目前实际中没看到过有个ENDPGM的CLLE程序,明天倒公司去仔细查查有没有这样的编译成功的代码。
|
| pure 回复于:2005-07-30 11:59:23
|
哎~~~
没想到400里随随便便都是世界之谜啊
|