【原创】用binddir创建srvpgm与不用binddir创建srvpgm的两种方法和差别

发布于 2022-08-20 09:24:09 字数 1455 浏览 9 评论 6

用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

王权女流氓 2022-08-27 09:10:54

本帖最后由 passthru 于 2012-09-29 12:15 编辑

bind目录不是bnddir。

这里指的bind目录是.bnd文件存放的地方,是*SRCFILE存放的地方。

遥远的绿洲 2022-08-26 22:46:49

passthru 发表于 2012-09-29 11:25
在用crtsrvpgm时,用.bnd文件,要指定bind目录,即.bnd文件存放的路径。

如果按照你对‘bind目录‘这个名字的定义,我不会有上面的说法。
那我想问一下,里面装有各种*SRVPGM,*MODULE对象的索引,类型为*BNDDIR的那个东东,你叫他什么名字?在我的定义里,他是bind目录。

独自←快乐 2022-08-26 20:22:37

qiao_zq 发表于 2012-09-29 10:30
楼主怎么将bind目录和bnd文件放在一起?
bind目录是编译(*pgm,*srvpgm)时邦定模块或者服务程序的一种方式。 ...

在用crtsrvpgm时,用.bnd文件,要指定bind目录,即.bnd文件存放的路径。

澜川若宁 2022-08-23 23:07:19

楼主怎么将bind目录和bnd文件放在一起?
bind目录是编译(*pgm,*srvpgm)时邦定模块或者服务程序的一种方式。
bnd文件是手动定义服务程序导出列表的,这个东东是服务程序专有的。
二者毫无关系。

心的憧憬 2022-08-22 23:10:25

谢谢分享

半岛未凉 2022-08-20 15:42:18

顶一下,再看。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文