从z/OS上的DLL cobol程序动态调用Nodell cobol程序
在使用Enterprise Cobol for z/OS的大型机上,是否可以从使用Nodell编译的Cobol程序中动态调用Cobol动态链接库(DLL)程序?从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是正在调用的
有许多方法可以实现您想要的功能 如果动态调用是指通过数据定义变量进行调用,那么我认为不能使用链接器/绑定器进行调用,因为绑定器需要在绑定时知道目标函数 您必须明确地
dllload
DLL加载模块,dllqueryfn
函数并以这种方式调用它
要使用链接器/绑定器,我相信需要以下步骤(P1
是执行调用的nodell
COBOL程序,P2
是正在调用的DLL
程序):
- 必须使用
选项编译和绑定DLL
P2
必须用P1
编译并用DLL绑定NODYNAM
必须包含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,而且它似乎提供了最大的灵活性