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

时间:2009-03-08 13:49:53

标签: cobol mainframe dll loadmodule

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

1 个答案:

答案 0 :(得分:2)

有很多方法可以做你想做的事。

如果通过动态调用表示通过数据定义变量进行调用,我认为您不能使用链接器/绑定器执行此操作,因为绑定器需要在绑定时知道目标函数。

你必须具体dllload DLL加载模块,dllqueryfn该函数并以此方式调用它。

要使用链接器/活页夹,我认为需要执行以下步骤(P1是执行调用的NODLL COBOL程序,P2DLL程序正在进行叫):

  • P2必须使用DLL选项进行编译和绑定。
  • P1必须使用NODYNAM编译并与DLL绑定。
  • P1必须包含CALL 'dll-func'(即仅限文字通话)。
  • 绑定P1时,SYSLIB必须先指向P2位置。

这会导致绑定器将P1P2合并到一个不完全是DLL调用的加载模块中,但我认为除了{{1解决方案。

我使用过旧式的dll函数,但是如果你处于足够高的级别,那么还有更新的dllload/dllqueryfn C辅助函数。

This page支持我的论点,即dlopen/dlsym程序只能绑定到单个加载模块中才能相互调用。但是你仍然需要使用静态调用。

This page提供了另一个选项,您可以将DLL程序放入与调用程序相同的加载模块中,并使用静态调用来获取它。似乎DLL程序可以在该加载模块中调用其他DLL程序而不是。因此,可以在DLL程序中提供静态网关功能,该功能可以动态调用不在加载模块中的DLL函数。这超出了我曾经做过的大事,所以你必须进行实验。

这些页面都来自publib-boulder网站,使用IBM产品的所有人应该知道(以及redbooks / redpapers网站)。

我,我更喜欢NODLL/DLL解决方案,因为这是我在AIX和其他UNIX上所习惯的,它似乎提供了最大的灵活性。