如何动态或静态调用模块?

时间:2009-08-17 17:33:54

标签: cobol

如何判断模块是动态还是静态

5 个答案:

答案 0 :(得分:1)

如果您在z / OS上运行,您可以完成此任务,但这并非易事。

首先,您必须跟踪保存区域链并使用CSVQUERY找出每个保存区域拥有的程序。每个其他程序都是Cobol运行时模块,如IGZCPAC。在IMS,CICS,TSO等下,这些模块可能不同。这很容易。

一旦您知道谁拥有所有相关的保存区域,您就可以使用OS LOADER / BINDER / LINKER实用程序来发现相同模块中的工件。这是不容易的部分。

答案 1 :(得分:0)

唯一的方法是查看链接编辑器(IEWL)或加载模块本身的输出。如果模块被动态调用,那么它将不存在于主模块中,如果它被称为STATICALLY,那么它将在加载模块中看到。调用包含程序名称的工作存储变量不会进行DYNAMIC调用。这种类型的调用称为IMPLICITE调用,因为工作存储变量的内容隐含了模块的名称。调用程序名称文字。

答案 2 :(得分:0)

  

调用工作存储变量,   包含程序名称,不包含   做一个动态的电话。

是的。调用variablename是始终 DYNAMIC。 根据DYNAM / NODYNAM编译器选项,调用'literal'是动态的或静态的。

警告:这适用于IBM大型机COBOL,我相信它也是标准的一部分。它可能不适用于其他非标准版本的COBOL。

答案 3 :(得分:0)

对于Micro Focus,COBOL静态链接通过调用(第3位)或编译器指令call-convention通过LITLINK进行控制。

静态链接时,程序ID /入口点的情况和调用本身很重要,因此您可能希望确保它是准确的并使用CASE指令。

LITLINK指令的反向是NOLITLINK指令或没有第3位设置的调用约定!

在Windows上,您可以使用“dumpbin / exports”实用程序在Unix中查看导出的符号,在Unix上通过“nm”实用程序查看。

可以使用cbllink上的'-K'命令行选项创建通过“cbllink”创建的.dll的导入.lib。

答案 4 :(得分:0)

查看调用语句。如果在文字中描述被调用的程序,则它是静态调用。如果在运行时确定被调用的程序,则称为动态调用:

      *     Static call
            call "THEPROGRAM"

      *     Dynamic call
            call wsProgramName