在PGM中使用CALLPRC PROC(ABC)
(ABC确实存在并正确。)
后提示Command CALLPRC not allowed in this setting.
为什么?
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里随随便便都是世界之谜啊 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/