[color=red:4d96a89aa7]400下c/c++程序咋调用cl/as400 command 等[/color:4d96a89aa7][size=24:4d96a89aa7][/size:4d96a89aa7]
qingzhou 回复于:2005-08-24 18:03:48 |
在RPGIV中调用CL命令是采用应用程序接口API:QCMDEXC来实现,如下例,编译完RPGIV后在命令行CALL一下,就会执行WRKSPLF等效的功能。
C、C++语句在大学时有接触过,不过都快忘记了, :oops: 现在自己也没有使用过C语言在OS/400平台上开发,用RPGIV+CL会多些。看看C、C++是否也有类似的API接口提供调用,或者是否也是使用API:QCMDEXC来实现。 [b:328292f46c]LIU/QRPGLESRC(QCMDEXC1)[/b:328292f46c] [code:1:328292f46c] ** D Cmd S 300 INZ('WRKSPLF') D CmdLen S 15 5 ** C EVAL CmdLen=%LEN(%TRIMR(Cmd)) ** C CALL 'QCMDEXC' C PARM Cmd C PARM CmdLen ** ** C EVAL *INLR=*ON C RETURN ** [/code:1:328292f46c] ===> CALL QCMDEXC1 [code:1:328292f46c] 使用所有假脱机文件 输入选项,按“执行”键。 1= 发送 2= 更改 3= 挂起 4= 删除 5= 显示 6= 释放 7= 信息 8= 属性 9= 使用打印状态 设备或 总 Cur Opt 文件 用户 队列 用户数据 Sts 页数 Page Cpy MIPOCP LIU TRFSCN RDY 8 1 MIPOCL1 LIU TRFSCN RDY 3 1 MIRPHP LIU TRFSCN RDY 8 1 MIRPHL1 LIU TRFSCN RDY 3 1 MIRSHL1S LIU TRFSCN RDY 3 1 MIRSHL2 LIU TRFSCN RDY 3 1 MI020P LIU TRFSCN RDY 8 1 MI020P1 LIU TRFSCN RDY 8 1 MI021L1 LIU TRFSCN RDY 3 1 尚有 ... 选项 1, 2, 3 或命令的参数 ===> F3= 退出 F10= 视图 4 F11= 视图 2 F12= 取消 F22= 打印机 F24= 其余键 [/code:1:328292f46c] |
layyf 回复于:2005-08-25 11:18:10 |
system() |
qingzhou 回复于:2005-08-25 11:58:52 |
[quote:567c758ce4="layyf"]system()[/quote:567c758ce4]
能说明清楚一点吗? |
span1024 回复于:2005-08-25 15:53:04 |
system(cmd) -- cmd 指定你要调用的程序/命令串就可以了,某种程度上来说,比CL或RPG里调用呀方便一些,因为不需要指出命令串的长度.
下面是一个简单的说明: #define CMD_SBMJOB "SBMJOB CMD( CALL TRS001 ('%S') ) JOBD(%s/%s) JOB(%s)" char cmd[200]; sprintf(cmd, CMD_SBMJOB, In_ID, jd_Lib, jd_Nam, rj_Nam); system(cmd); |
span1024 回复于:2005-08-25 15:55:15 |
当然在C语言中也可以象 "qingzhou" 说的那样,通过使用系统API:QCMDEXC()来做. |
qingzhou 回复于:2005-08-25 16:00:05 |
[quote:70e76fe2ff="span1024"]
sprintf(cmd, CMD_SBMJOB, In_ID, jd_Lib, jd_Nam, rj_Nam); system(cmd);[/quote:70e76fe2ff] 很好。。。 :em02: 设为精彩帖子备用,日后有需要的朋友可以参考。 |
wjywhl 回复于:2005-08-30 19:41:16 |
1、先用预处理命令将rpg程序映射成C/C++API。
2、直接调用映射后的api即可 我在400上用C/C++作过实际项目的 |
Eagle_wolf 回复于:2005-08-31 18:29:15 |
400 提供了很多类unix的api
system 就是一个 其他如sleep usleep 等等 |
yoyoage 回复于:2005-08-31 21:54:51 |
[quote:5ebbcbd92b="wjywhl"]1、先用预处理命令将rpg程序映射成C/C++API。
2、直接调用映射后的api即可 我在400上用C/C++作过实际项目的[/quote:5ebbcbd92b] 怎么把rpg程序映射成c/c++ 的api?可不可以详细点解释一下?谢谢先。 |
qingzhou 回复于:2005-08-31 22:22:31 |
[quote:3d86bec3f9="yoyoage"]
怎么把rpg程序映射成c/c++ 的api?可不可以详细点解释一下?谢谢先。[/quote:3d86bec3f9] c++中为什么会引入const ? c++的提出者当初是基于什么样的目的引入(或者说保留)const关键字呢?,这是一个有趣又有益的话题,对理解const很有帮助。 1. 大家知道,c++有一个类型严格的编译系统,这使得c++程序的错误在编译阶段即可发现许多,从而使得出错率大为减少,因此,也成为了c++与c相比,有着突出优点的一个方面。 2. c中很常见的预处理指令 #define variablename variablevalue 可以很方便地进行值替代,这种值替代至少在三个方面优点突出: 一是避免了意义模糊的数字出现,使得程序语义流畅清晰,如下例: #define user_num_max 107 这样就避免了直接使用107带来的困惑。 二是可以很方便地进行参数的调整与修改,如上例,当人数由107变为201时,进改动此处即可, 三是提高了程序的执行效率,由于使用了预编译器进行值替代,并不需要为这些常量分配存储空间,所以执行的效率较高。 鉴于以上的优点,这种预定义指令的使用在程序中随处可见。 3. 说到这里,大家可能会迷惑上述的1点、2点与const有什么关系呢?,好,请接着向下看来: 。。。。。。 具体可以参考如下帖子::mrgreen: http://bbs.chinaunix.net/forum/viewtopic.php?t=143183&start=0&sid=df265c717e3a1b0487b178e98b056402 |
wjywhl 回复于:2005-09-10 19:06:53 |
http://www-1.ibm.com/support/docview.wss?uid=csc10a51294c5b22e6f648256f3900080d9f |
wjywhl 回复于:2005-09-10 19:07:49 |
http://www-1.ibm.com/support/docview.wss?uid=csc10a51294c5b22e6f648256f3900080d9f |
wjywhl 回复于:2005-09-12 22:51:45 |
大家提到的system或者*exec()的函数,
不但性能低,而且根本没办法让c程序处理rpg程序返回参数。 映射成c api方式,才是万能的方法。 在c程序预处理段如下声明即可: #pragma linkage(pgmrpg, os, nowiden) ..... main() { .... pgmrpg(parm1, parm2,rtncod); .... } 建议所有的传入参数最好采用字符指针,约定长度。 另外,c程序取rpg程序参数时,用memcpy函数拷贝。 |
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/