第九章 程序和过程调用.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第九章 程序和过程调用

2.6 第九章 程序和过程调用 在ILE中,可以调用程序或过程。调用者必须指出调用语句的目标是程序还是过程。ILE RPG/400提供以下操作码支持程序或过程调用以及参数传递。 操作码 功能 CALL 调用程序目标 CALLB 调用连接的过程 RETURN 返回到调用的程序或过程 PLIST 定义参数列表 PARM 定义参数 本章描述了如何: 调用程序或过程 在程序和过程间传递参数 从程序或过程中返回 使用ILE可连接的API 调用图形子例程 调用特殊子例程 2.6.1 程序/过程调用概述 在ILE内的程序处理是基于过程级的(ILE程序包括一个或多个模块,模块包括一个或多个过程。一个ILE RPG/400模块只包含一个过程。其它的ILE语言允许有多个过程)。“程序调用”是过程调用的特殊形式;它是对程序入口过程的调用。程序入口过程是在建立程序时设计,在程序被调用时接收控制权。 本单元比较了程序调用和过程调用。为了帮助你理解调用间的相互关系,也介绍了调用堆栈的概念。 2.6.1.1 程序调用 可以使用程序调用来调用OPM或ILE程序。程序调用是对程序目标(*PGM)的调用。调用程序把控制传递给被调用程序之前,被调用程序的名字转换成运行时的地址。因此程序调用通常称为动态调用。 调用ILE程序或EPM程序或OPM程序都是程序调用的例子。对于不可连接的API的调用也是程序调用的例子。 你可以使用CALL操作进行程序调用。 当ILE程序被调用时,程序入口过程接收程序的参数并且得到对该程序的初始控制。另外,在该程序内的所有过程都成为有效的过程调用。 2.6.1.2 过程调用 与OPM程序不同,ILE程序不只限于程序调用。ILE程序也可以用静态过程调用或过程指针调用其它过程。过程调用也叫做调用。 静态调用是对一个ILE过程的调用,由该过程的名字在连接时转为地址,因此,以静态命名。使用静态过程调用的运行性能比使用程序调用要快。静态调用允许有操作描述,省略参数,并且扩展了传递的参数个数的限制(到399)。 过程指针调用提供了对过程的动态调用方法。例如,你可以把过程指针作为参数传递给另一个过程,然后,运行在传递的PARM操作中指定的过程,也可以用一个过程名或地址数组向不同的过程发送过程调用。如果被调用的过程在相同的活动组中,那么过程指针调用的开销几乎与静态过程调用的开销完全相同。 使用任何一种调用,可以调用同一个ILE程序或服务程序中某个模块内的过程,或是某个ILE服务程序内的过程。任何能用静态过程调用的过程都可以用过程指针调用。 要使用CALLB操作进行过程调用。 2.6.1.3 调用堆栈 调用堆栈是按照后进先出顺序(IFO)排列的调用堆栈入口列表。调用堆栈入口是对程序或过程的调用(CALL或CALLB)。每个作业有一个调用堆栈。 当ILE程序被调用时,程序入口过程首先加到调用堆栈中。然后系统自动地执行过程调用,并且相关的用户过程也被添加。当过程被调用时,只有用户过程被添加;对于程序入口过程没有动作。 图39显示一个调用堆栈,应用程序有OPM程序组成的,调用一个有两个模块的ILE程序,一个是RPG模块,包含程序入口程序和相关的用户入口过程;一个是C模块包含普通的过程。注意在本书的图解中,当前入口是在堆栈底部的。 调用堆栈 OPM OPM 程序A ILE 程序调用 RPG模块 ILE 程序入口例程 PEP ILE 过程调用(由系统) 用户入口例程 UEP 过程调用 C模块 ILE 例程 例程 图39 调用堆栈中的程序和过程调用 注意:用程序调用,对程序入口过程和用户入口过程(UEP)的调用是同时发生的,因为对用户入口过程(UEP)的调用是自动的。因此,今后在本章和其它章节中有关调用堆栈的图解中,把对程序调用的两个步骤合在一起。 关于调用堆栈需要理解的很重要的一点是,在堆栈上的ILE RPG/400过程。如果没有返回到调用者就不能被调用。因此,在调用其它过程时要小心,不能调用这样的过程,该过程已经调用一个处于活动状态的ILE RPG/400过程。 例如,假设在同一程序中有过程A,B和C。如果过程A调用过程B,那么过程B就不可

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档