COBOL - Fazendo chamadas dinâmicas



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Estruturação de aplicativos complexos - Fazendo chamadas dinâmicas

Enterprise COBOL for z/OS, Version 4.2, Programming Guide


Quando você usa uma instrução literal CALL em um programa que é compilado usando as opções do compilador DYNAM e NODLL, ou quando você usa a instrução do identificador CALL em um programa que é compilado usando a opção do compilador NODLL, ocorre uma chamada dinâmica.

Nessas formas da instrução CALL, o subprograma COBOL chamado não é editado por link com o programa principal.
Em vez disso, ele é editado por link em um módulo de carregamento separado e é carregado no tempo de execução apenas quando necessário (ou seja, quando chamado).
O nome do programa no parágrafo PROGRAM-ID ou instrução ENTRY deve ser idêntico ao nome do módulo de carregamento correspondente ou alias do módulo de carregamento do módulo de carregamento que contém o programa.

Cada subprograma que você chama com uma instrução CALL dinâmica pode fazer parte de um módulo de carregamento diferente que é membro da biblioteca de links do sistema ou de uma biblioteca privada fornecida por você.
Em qualquer um dos casos, ele deve estar em uma biblioteca de carregamento MVS; ele não pode residir no sistema de arquivos hierárquico.
Quando uma instrução CALL dinâmica chama um subprograma que não está residente no armazenamento, o subprograma é carregado do armazenamento secundário para a região ou partição que contém o programa principal e uma ramificação para o subprograma é executada.

A primeira chamada dinâmica a um subprograma dentro de uma unidade de execução obtém uma nova cópia do subprograma.
Chamadas subsequentes para o mesmo subprograma (pelo chamador original ou qualquer outro subprograma dentro da mesma unidade de execução) resultam em um desvio para a mesma cópia do subprograma em seu último estado usado, desde que o subprograma não possua o atributo INITIAL.
Portanto, a reinicialização de qualquer um dos seguintes itens é de sua responsabilidade:

  • Declarações GO TO que foram alteradas
  • Itens de dados

Se você chamar o mesmo programa COBOL em unidades de execução diferentes, uma cópia separada de WORKING-STORAGE será alocada para cada unidade de execução.

Restrições: Você não pode fazer chamadas dinâmicas para:

  • Programas DLL COBOL
  • Programas COBOL compilados com a opção PGMNAME (LONGMIXED), a menos que o nome do programa seja menor ou igual a oito caracteres e esteja todo em maiúsculas
  • Programas COBOL compilados com a opção PGMNAME (LONGUPPER), a menos que o nome do programa seja menor ou igual a oito caracteres de comprimento
  • Mais de um ponto de entrada no mesmo programa COBOL (a menos que uma instrução CANCEL interveniente tenha sido executada)

Conceitos relacionados


© Copyright IBM Corp.