COBOL - Usando ponteiros de procedimento e função



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

COBOL - Estruturação de aplicações complexas - Uso de ponteiros de procedimento e função

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


Você pode definir itens de dados de ponteiro de procedimento e ponteiro de função usando o formato 6 da instrução SET.

Os ponteiros de procedimento são itens de dados definidos com a cláusula USAGE IS PROCEDURE-POINTER.
Ponteiros de função são itens de dados definidos com a cláusula USAGE IS FUNCTION-POINTER.
Nessas informações, "ponteiro" se refere a um item de dados de ponteiro de procedimento ou a um item de dados de ponteiro de função.
Você pode definir qualquer um desses itens de dados para conter endereços de entrada ou ponteiros para esses pontos de entrada:

  • Outro programa COBOL que não está aninhado.
    Por exemplo, para que uma rotina de tratamento de erros gravada pelo usuário assuma o controle quando ocorre uma condição de exceção, você deve primeiro passar o endereço de entrada da rotina para CEEHDLR, um serviço de chamada de ambiente de linguagem de gerenciamento de condição, para que a rotina seja registrada.

  • Um programa escrito em outro idioma.
    Por exemplo, para receber o endereço de entrada de uma função C, chame a função com a instrução CALL RETURNING.
    Ele retornará um ponteiro que você pode usar como um ponteiro de função ou converter em um ponteiro de procedimento usando uma forma da instrução SET.

  • Um ponto de entrada alternativo em outro programa COBOL (conforme definido em uma instrução ENTRY).

A instrução SET define o ponteiro para se referir a um ponto de entrada no mesmo módulo de carregamento que seu programa, a um módulo de carregamento separado ou a um ponto de entrada que é exportado de uma DLL, dependendo do DYNAM | NODYNAM e DLL | NODLL opções do compilador.
Portanto, considere estes fatores ao usar esses itens de dados de ponteiro:

  • Se você compilar um programa com as opções NODYNAM e NODLL e definir um item de ponteiro para um valor literal (para um nome real de um ponto de entrada), o valor deve se referir a um ponto de entrada no mesmo módulo de carregamento.
    Caso contrário, a referência não pode ser resolvida.

  • Se você compilar um programa com a opção NODLL e definir um item de ponteiro para um identificador que conterá o nome do ponto de entrada em tempo de execução ou definir o item de ponteiro como literal e compilar com a opção DYNAM, o item de ponteiro, seja literal ou variável, deve apontar para um ponto de entrada em um módulo de carregamento separado.
    O ponto de entrada pode ser o ponto de entrada principal ou um ponto de entrada alternativo nomeado em um editor de ligação ALIAS ou instrução de fichário.

  • Se você compilar com as opções NODYNAM e DLL e definir um item de ponteiro para um valor literal (o nome real de um ponto de entrada), o valor deve se referir a um ponto de entrada no mesmo módulo de carregamento ou a um nome de ponto de entrada que é exportado de um módulo DLL.
    No último caso, você deve incluir o arquivo lateral DLL para o módulo DLL de destino na edição do link do módulo de carregamento do programa.

  • Se você compilar com as opções NODYNAM e DLL e definir um item de ponteiro para um identificador (um item de dados que contém o nome do ponto de entrada em tempo de execução), o valor do identificador deve se referir ao nome do ponto de entrada que é exportado de um módulo DLL.
    Nesse caso, o nome do módulo DLL deve corresponder ao nome do ponto de entrada exportado.

Se você definir um item de ponteiro para um endereço de entrada em um módulo de carregamento chamado dinamicamente, e seu programa subsequentemente cancelar esse módulo chamado dinamicamente, esse item de ponteiro se tornará indefinido.
A referência a ele posteriormente não é confiável.


© Copyright IBM Corp.