首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从z/OS上的DLL cobol程序动态调用NODLL cobol程序

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

Stack Overflow用户
提问于 2009-03-08 13:49:53
回答 1查看 2.2K关注 0票数 1

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-03-17 02:00:42

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

如果您所说的动态调用是指通过数据定义变量进行调用,那么我不认为您可以使用链接器/绑定器执行此操作,因为绑定器需要在绑定时知道目标函数。

你必须特别地对DLL加载模块进行dllload,对函数进行dllqueryfn,并以这种方式调用它。

要使用链接器/绑定器,我认为需要执行以下步骤(P1是执行调用的NODLL COBOL程序,P2是被调用的DLL程序):

  • P2必须编译并与代码绑定option.
  • P1必须使用NODYNAM编译并与DLL.
  • P1绑定必须包含CALL 'dll-func' (即,仅文字调用)。
  • 绑定P1时,SYSLIB必须首先指向P2位置。

这将导致绑定器将P1P2合并到单个加载模块中,这并不完全是DLL调用,但我认为除了dllload/dllqueryfn解决方案之外,没有其他方法可以解决这个问题。

我已经使用了老式的dll函数,但是,如果您处于足够高的级别,也可以使用较新的dlopen/dlsym C辅助函数。

This page支持我的观点,即NODLL/DLL程序只有在绑定到单个加载模块中时才能相互调用。但是,您仍然必须使用静态调用。

This page提供了另一种选择,您可以将DLL程序放入与调用程序相同的加载模块中,并使用静态调用来访问它。DLL程序似乎可以调用不在该加载模块中的其他DLL程序。因此,可以在DLL程序中提供静态网关函数,该静态网关函数可以动态地调用不在加载模块中的DLL函数。这超出了我在大铁杆上做过的任何事情,所以你必须进行实验。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/623604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档