【原创】用binddir创建srvpgm与不用binddir创建srvpgm的两种方法和差别
用binddir创建srvpgm与不用binddir创建srvpgm的两种方法和差别
用binddir创建的srvpgm:
1)用binddir创建的svrpgm,顾名思义,需要一个binddir;
2)需要一个bind文件,.bnd;
3)通过这个binddir把bind文件定义的服务应用程序记在这个服务程序下。
4)服务应用程序可以是标准程序的编程格式,即无需定义接口原型,只用*entry定义。
5)服务程序与挂在其之下的服务应用程序必须是独立的module形式;
6)通过crtsrvpgm命令的参数项binddir,把各个服务应用程序module/s静态的bind在一起。
7)服务应用程序在bind文件中,即登记在binddir下这个服务程序的服务应用程序是有次序的,重新生成服务程序,若改变服务应用程序的在bind文件中的次序,如改变服务应用程序的命名后调整在bind文件中的位置,会造成调用这个服务应用程序的错误。如果一定要改变bind文件中服务应用程序的位置,方法一、保留原来次序位置,在bind文件的末尾增加新改名的这个服务应用程序;方法二、通过bind文件中的STRPGMEXP PGMLVL(*CURRENT)和STRPGMEXP PGMLVL(*PRV)定义节,调整重新命名的服务程序的位置。
8)在应用程序的生成过程中,通过binddir,找到相应的服务应用程序,然后静态地与这个服务应用程序bind在一起。
9)程序的备份和恢复过程,会丢失bind静态链。
不用binddir创建的srvpgm:
1)没有binddir;
2)没有bind文件,但是必须在服务程序中,通过PR节定义所有的服务应用程序;
3)服务应用程序在服务程序中的定义,没有次序问题,可以随意改变服务应用程序的位置;
4)服务应用程序的procedure可以与服务程序连体,或分开的;如果是分开,在crtsrvpgm时,把这个程序所包扩的所有modules bind在一起,生成服务程序。
5)服务程序在H表中,必须定义NoMain;
6)服务程序中可以只有D表,即定义节;
7)如果服务应用程序是独立的procedure用于生成moudle,procedure的H表,也必须定义NoMain;
8)因为RPGVI v6r1版本前,不允许非主procedure定义文件,即使用F表,所以在非binddir的服务程序下,不允许服务应用程序使用标准编程格式,即使用*entry节代替原型接口。只能使用定义原型接口的PI的procedure,或由其生成的moudle。
9)在应用程序的生成过程中,编译器查找库列表中所有服务程序,第一个服务应用程序就与应用程序静态地bind在一起;所以多个同名的服务程序,或者服务应用程序要注意版本控制。
10)与上述的用binddir创建的服务程序一样,程序的备份和恢复,可能会丢失bind静态链。
原文在passthru.cublog.cn中,初稿。
[ 本帖最后由 passthru 于 2009-7-19 00:25 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
本帖最后由 passthru 于 2012-09-29 12:15 编辑
bind目录不是bnddir。
这里指的bind目录是.bnd文件存放的地方,是*SRCFILE存放的地方。
如果按照你对‘bind目录‘这个名字的定义,我不会有上面的说法。
那我想问一下,里面装有各种*SRVPGM,*MODULE对象的索引,类型为*BNDDIR的那个东东,你叫他什么名字?在我的定义里,他是bind目录。
在用crtsrvpgm时,用.bnd文件,要指定bind目录,即.bnd文件存放的路径。
楼主怎么将bind目录和bnd文件放在一起?
bind目录是编译(*pgm,*srvpgm)时邦定模块或者服务程序的一种方式。
bnd文件是手动定义服务程序导出列表的,这个东东是服务程序专有的。
二者毫无关系。
谢谢分享
顶一下,再看。