Dinamicamente chamando um programa NODLL cobol de um programa DLL cobol em z / OS
-
05-07-2019 - |
Pergunta
no mainframe usando o Enterprise Cobol para z / OS, é possível chamar dinamicamente um programa Cobol dyamic link library (DLL) a partir de um programa cobol que foi compilado com NODLL
Solução
Há uma série de maneiras de fazer o que quiser.
Se, por chamada dinamicamente, você chamada média através de uma variável de definição de dados, eu não acho que você pode fazer isso com o vinculador / aglutinante desde as necessidades da pasta para conhecer as funções alvo em tempo de ligação.
Você tem que dllload
especificamente o módulo de carregamento DLL, dllqueryfn
a função e chamá-lo dessa forma.
Para usar o vinculador / aglutinante, eu acredito que os seguintes passos são necessários (P1
é o programa NODLL
COBOL fazendo a chamada, P2
é o programa DLL
sendo chamado):
-
P2
deve ser compilado e vinculado com a opçãoDLL
. -
P1
deve ser compilado comNODYNAM
e preso com DLL. -
P1
deve conterCALL 'dll-func'
(ou seja, as chamadas literais apenas). - Quando a ligação
P1
,SYSLIB
deve primeiro ponto para o localP2
.
Isto fará com que o ligante de incorporar tanto P1
e P2
em um único módulo de carga que não é exatamente DLL chamando mas eu não acho que há alguma maneira de contornar esse outro que a solução dllload/dllqueryfn
.
Eu usei as dll funções de estilo antigo, mas, se você estiver em um nível alto o suficiente, há também as funções C auxiliares mais recente dlopen/dlsym
.
Esta página fornece suporte para a minha afirmação de que os programas NODLL/DLL
só pode chamar uns aos outros se ligado em um único módulo de carga. Você ainda tem que usar chamadas estáticas no entanto.
Esta página oferece até uma outra opção, onde você pode colocar o programa DLL no mesmo módulo de carga como o programa ea utilização estáticos chamando chamadas para chegar a ela. Parece que o programa DLL pode chamar outros programas DLL não em que o módulo de carga. Assim, pode ser possível fornecer uma função de gateway estático no programa DLL que pode dinamicamente chamar uma função DLL não no módulo de carga. Isto é além de qualquer coisa que eu já fiz na grande ferro, assim você terá a experiência.
Ambos essas páginas são a partir de sites publib-Boulder que todos usar um produto IBM deve saber sobre (junto com o site Redbooks / Redpapers também).
Me, eu prefiro a solução dllload/dllqueryfn
já que é o que eu estou acostumado a partir AIX e outros UNIXes e parece fornecer o máximo de flexibilidade.