Dynamisch Aufruf eines NODLL COBOL-Programm aus einer DLL COBOL-Programm unter z / OS
-
05-07-2019 - |
Frage
Auf dem Mainframe mit Enterprise Cobol für z / OS, ist es möglich, eine Cobol dyamic Link Library (DLL) Programm von einem COBOL-Programm dynamisch aufrufen, die mit NODLL kompiliert wurde?
Lösung
Es gibt eine Reihe von Möglichkeiten zu tun, was Sie wollen.
Wenn durch dynamisch aufrufen, meinen Sie über eine Datendefinition Variable nennen, ich glaube nicht, dass Sie dies mit dem Linker / Bindemittel tun können, da das Bindemittel die Zielfunktionen beim Binden wissen muss.
Sie haben speziell die DLL-Lademodul dllload
, die Funktion dllqueryfn
und es auf diese Weise nennen.
den Linker / Bindemittel zu verwenden, glaube ich, sind folgende Schritte erforderlich (P1
ist das NODLL
COBOL-Programm der Berufung zu tun, P2
ist das DLL
Programm wird genannt):
-
P2
muss mit derDLL
Option kompiliert und gebunden werden. -
P1
muss mitNODYNAM
und gebunden mit DLL kompiliert werden. -
P1
muss enthaltenCALL 'dll-func'
(das heißt, wörtliche Anrufe). - Wenn die Bindung
P1
,SYSLIB
muss erster Punkt auf dieP2
Lage.
Dies bewirkt, dass das Bindemittel sowohl P1
und P2
in ein einziges Lademodul zu integrieren, die nicht genau nennen DLL ist, aber ich glaube nicht, dass es eine Möglichkeit, um diese andere als die dllload/dllqueryfn
Lösung.
Ich habe die Altart dll-Funktionen verwendet, aber, wenn Sie bei einem ausreichend hohen Niveau sind, dann gibt es auch die neueren dlopen/dlsym
C Helferfunktionen.
Diese Seite bietet eine weitere Möglichkeit, in dem Sie das DLL-Programm in das gleiche Lademodul wie das rufende Programm und verwenden Sie einen statischen Aufruf setzen können, um es zu bekommen. Es scheint, dass das DLL-Programm aufrufen können andere DLL-Programme nicht in diesem Lademodul. So kann es möglich sein, eine statische Gateway-Funktion in dem DLL-Programm zur Verfügung zu stellen, die dynamisch eine DLL-Funktion nicht im Lademodul aufrufen kann. Dies ist als alles, was ich je auf der großen Eisen getan haben, so werden Sie experimentieren müssen.
Diese beiden Seiten sind von den publib-boulder-Site, die alle mit einem IBM Produkt wissen sollte (zusammen mit der redbooks / redpapers Website als auch).
Me, ziehe ich die dllload/dllqueryfn
Lösung, da das ist, was ich von AIX gewohnt bin und andere UNIX-Varianten und es scheint, ein Höchstmaß an Flexibilität zu bieten.