当前位置: 代码迷 >> 综合 >> ILE下的各种语言(C/C++, CL, RPG, COBOL)的混合编程实例及原理简介
  详细解决方案

ILE下的各种语言(C/C++, CL, RPG, COBOL)的混合编程实例及原理简介

热度:84   发布时间:2023-12-09 12:40:32.0

 本文转载:http://www-128.ibm.com/developerworks/cn/aix/library/au-crosslanguage/

    在IBM System i平台上,ILE是Integrated Language Environment 的缩写,意思为集成语言环境。ILE是被设计用来提升IBM System i上程序开发的一系列工具和相关的系统支持。在System i平台ILE环境下,C/C++、CL、RPG、COBOL语言编写的程序可以编译成Module Object。Module Object可以直接链接成可执行的Program Object,也可以链接成不能直接执行的Service Program Object,这些Service Program Object可以和其他的Program Object链接后即变成可直接执行的Object。Object的编译链接过程如下图所示:

ILE 示意图

 

    通常情况下,程序只能调用用本语言编写的Procedure,而不调用其他语言编写的Procedure。本文将要讲述的混合编程打破了这一常规,在ILE环境下,通过各种语言编写的模块之间互相调用彼此的Procedure来实现各种语言的混合编程。例如CL(Control Language)编写的模块中可以调用C/C++、RPG、COBOL编写的Procedure,C语言程序中也可以调用CL、RPG、COBOL编写的Procedure。

 

 

ILE中的几个重要概念

 

    在讲述混合编程之前,首先简单介绍ILE中的几个重要概念。

 

    Procedure:

    一段高级语言编写的source,它可以详细地完成某项任务,然后返回给调用者。对C语言而言,Procedure就是一个函数;对CL而言,Procedure其实就是一个CL程序的source。

   

    Module:

    Module是由ILE编译器编译出来的,不可以执行的Object。Module包含有一个或多个Procedure和一些数据信息,以及在这个Module中一些Procedure和数据导出导入信息。当然,有些Module还包含调试信息,这取决于你如何编译程序。Module的结构如下图所示:

Module结构 (示意图来自ILE Concepts

 

    在Module Object M1中,导出了两个Procedure(Draw_Line和Draw_Arc)和一个数据项(rtn_code);同时,M1也导入一个Procedure(Draw_Plot)。这个Module Object包含有一个PEP(程序入口函数,在C中是main函数)和一个UEP(Procedure Draw_Arc)。另外,Module Object M1还包含一些调试信息。  

 

 

    Service Program :

    Service Program 是ILE链接器把一个或多个Module链接在一起而生成的Object。Service Program不可以直接在System i上执行。从某种角度来看,System i平台上的Service Program类似Windows平台上的DLL(Dynamic Link Library)。Service Program 中导出的Procedure和数据可以被Program 或者其他的Service Program调用。Service Program的public interface中定义了其他ILE Object可以访问的Procedure和数据信息,我们可以通过binder language来定义Service Program的public interface。

       

    Service Program 一般包含有Module相关的数据信息,Procedure和数据导出导入信息和调试信息。Service Program 至少有一个UEP,没有PEP。Service Program 的结构如下图所示:

Service Program 结构 (示意图来自ILE Concepts

 

     SPGMEXAMP Service Program中,包含有4个Module(M1、M2、M3和M4)。SPGMEXAMP的public interface有Procedure P3、P4和数据项D。P3是在Module M3中定义的,P4是在Module M4中定义的。另外SPGMEXAMP调用了其他ILE Object提供的print Procedure。

 

 

    Program :

    Program 是ILE链接器把一个或者多个Module Object绑定链接而成的可以执行的Object。Program 是由一个或多个Module链接而成,有时还需要链接Service Program。Program 有且只有一个程序入口PEP,但可以有多个UEP。PEP是在程序链接CRTPGM时,由参数ENTMOD来指定哪个Module的PEP为程序的PEP。Program 的结构如下图所示:

 

   

Program 结构 (示意图来自ILE Concepts)