| 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函数拷贝。
|