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

Foi útil?

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ção DLL.
  • P1 deve ser compilado com NODYNAM e preso com DLL.
  • P1 deve conter CALL 'dll-func' (ou seja, as chamadas literais apenas).
  • Quando a ligação P1, SYSLIB deve primeiro ponto para o local P2.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top