从z/OS上的DLL cobol程序动态调用Nodell cobol程序

从z/OS上的DLL cobol程序动态调用Nodell cobol程序,cobol,mainframe,dll,loadmodule,Cobol,Mainframe,Dll,Loadmodule,在使用Enterprise Cobol for z/OS的大型机上,是否可以从使用Nodell编译的Cobol程序中动态调用Cobol动态链接库(DLL)程序?有许多方法可以实现您想要的功能 如果动态调用是指通过数据定义变量进行调用,那么我认为不能使用链接器/绑定器进行调用,因为绑定器需要在绑定时知道目标函数 您必须明确地dllloadDLL加载模块,dllqueryfn函数并以这种方式调用它 要使用链接器/绑定器,我相信需要以下步骤(P1是执行调用的nodellCOBOL程序,P2是正在调用的

在使用Enterprise Cobol for z/OS的大型机上,是否可以从使用Nodell编译的Cobol程序中动态调用Cobol动态链接库(DLL)程序?

有许多方法可以实现您想要的功能

如果动态调用是指通过数据定义变量进行调用,那么我认为不能使用链接器/绑定器进行调用,因为绑定器需要在绑定时知道目标函数

您必须明确地
dllload
DLL加载模块,
dllqueryfn
函数并以这种方式调用它

要使用链接器/绑定器,我相信需要以下步骤(
P1
是执行调用的
nodell
COBOL程序,
P2
是正在调用的
DLL
程序):

  • 必须使用
    DLL
    选项编译和绑定
    P2
  • P1
    必须用
    NODYNAM
    编译并用DLL绑定
  • P1
    必须包含
    调用'dll func'
    (即,仅限文本调用)
  • 绑定
    P1
    时,
    SYSLIB
    必须首先指向
    P2
    位置
这将导致活页夹将
P1
P2
合并到一个加载模块中,该模块不完全是DLL调用,但我认为除了
dllload/dllqueryfn
解决方案之外,没有其他方法可以解决这个问题

我使用了老式的dll函数,但是如果级别足够高,还可以使用较新的
dlopen/dlsym
C帮助函数

为我的论点提供支持,
nodell/DLL
程序只能在绑定到单个加载模块时相互调用。但是,您仍然必须使用静态调用

提供了另一个选项,您可以将DLL程序与调用程序放在同一个加载模块中,并使用静态调用访问它。DLL程序似乎可以调用不在该加载模块中的其他DLL程序。因此,可以在DLL程序中提供一个静态网关函数,该函数可以动态调用加载模块中没有的DLL函数。这是我在大熨斗上做过的任何事情都做不到的,所以你必须进行实验

这两个页面都来自publib boulder站点,每个使用IBM产品的人都应该知道这些站点(以及红皮书/红皮书站点)

在我看来,我更喜欢
dllload/dllqueryfn
解决方案,因为我习惯于使用AIX和其他Unix,而且它似乎提供了最大的灵活性