用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静态链。
10)用binddir生成的svrpgm可以通过wrkbnddir命令,交互式地往某个binddir下的svrpgm程序添加或删除service module。
不用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版本前,不允许NoMain的procedure定义文件,即使用F表,所以在非binddir的服务程序下,不允许服务应用程序使用标准编程格式,即使用*entry节代替原型接口。只能使用定义原型接口的PI的procedure,或由其生成的moudle。
9)在应用程序的生成过程中,编译器查找库列表中所有服务程序,第一个服务应用程序就与应用程序静态地bind在一起;所以多个同名的服务程序,或者服务应用程序要注意版本控制。
10)与上述的用binddir创建的服务程序一样,程序的备份和恢复,可能会丢失bind静态链。
11)没有用binddir生成的srvpgm,不能用wrkbnddir命令交互式地往某个binddir添加或删除service module。
(初稿,如有新内容,继续更新。)
阅读(1927) | 评论(0) | 转发(0) |