|
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.
|