Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   IDE-s para GnuCOBOL (https://www.cobolforo.es/forumdisplay.php?f=95)
-   -   [Sintaxis] CALL en OPENCOBOLIDE 4.7.6 da error (no encuentra) (https://www.cobolforo.es/showthread.php?t=1524)

etilico2022 6 de septiembre de 2022 18:55

CALL en OPENCOBOLIDE 4.7.6 da error (no encuentra)
 
Estoy aprendiendo a usar el OpenCobolIDE 4.7.6. Hice un programa principal con menu, y de ahi intento llamar a otro programa cobol utilizando CALL "programa2". No estoy usando USING. Tanto programaPrincipal.cbl y programa2.cbl estan en el mismo directorio. Y los .exe estan en bin. Al ejecutar me sale el mensaje que no puede encontrar "programa2". Probe mover programa2.cbl a diferentes directorios pero nada. Tambien agregue al PATH, la subcarpeta bin. Por favor, si alguien puede darme una mano. Gracias.

Joseg 6 de septiembre de 2022 19:54

Cita:

Citación del post de etilico2022 (Mensaje 8092)
Estoy aprendiendo a usar el OpenCobolIDE 4.7.6. Hice un programa principal con menu, y de ahi intento llamar a otro programa cobol utilizando CALL "programa2". No estoy usando USING. Tanto programaPrincipal.cbl y programa2.cbl estan en el mismo directorio. Y los .exe estan en bin. Al ejecutar me sale el mensaje que no puede encontrar "programa2". Probe mover programa2.cbl a diferentes directorios pero nada. Tambien agregue al PATH, la subcarpeta bin. Por favor, si alguien puede darme una mano. Gracias.

Essa é uma situação prevista. Não pode chamar dessa forma executáveis.
Tente ver mais detalhes aqui: GnuCOBOL / Discussion / Help getting started: CALL verb not working properly?

Tem que compilar dentro do mesmo EXE os vários programas.

- - - Updated - - -

Cita:

Citación del post de Joseg (Mensaje 8093)
Essa é uma situação prevista. Não pode chamar dessa forma executáveis.
Tente ver mais detalhes aqui: GnuCOBOL / Discussion / Help getting started: CALL verb not working properly?

Tem que compilar dentro do mesmo EXE os vários programas.

Para compilar para o mesmo EXE: cobc -x programa.cbl programa2.cbl ...
Também pode criar DLLs que já podem ser acedidos pelo comando "CALL"

OpenCOBOL FAQ

etilico2022 7 de septiembre de 2022 14:09

Muchísimas gracias!!
He seguido tus sugerencias y programa2 lo he creado como modulo (.dll). Y ahi funciono ok el CALL "programa2".
Gracias por tu ayuda.

Paco_Diaz 3 de junio de 2023 11:49

Buenas.

@etilico2022, podrias poner aqui exactamente que fue lo que usaste para que funcionara?. Tengo exactamente el mismo problema y estoy haciendo todo tipo de combinaciones segun el articulo que se cita en el segundo mensaje, pero no consigo que me funcione un simple CALL a un subprograma, que lo unico que hace es mostrar un mensaje.

Muchas gracias.

Un saludo. Paco.

etilico2022 4 de junio de 2023 05:12

@Paco_Diaz, lo que hice es escribir en el programa principal CALL "Programa_llamado". Programa_llamado va sin el .CBL. Luego compilé Programa_llamado como tipo de programa Module. De ésta manera se creó Programa_llamado.DLL. Y ahí me funcionó.

Saludos

Paco_Diaz 4 de junio de 2023 12:27

Buenas.

Esto es increible......

A no ser que por el monton de combinaciones que hice diera por hecho que esta ya la habia usado, no me funcionaba en ninguna de las combinaciones, pero he de decir que ha funcionado a la primera.

Esto me abre una puerta increible para seguir programando en 64 bits con todas las cosas que he hecho, porque he estado mirando otras posibilidades, y, entre que no me convencian, o no podia descargarlas (en la gran mayoria de ocasiones), lo veia todo negro.

Muchas gracias @etilico2022, .

Un saludo. Paco.

P.D.: Quiza mas adelante pida ayuda sobre como instalar gnucobol (para ver las posibilidades que añade a rmcobol/85), porque con eso de ver el fichero "TODO", el make y toda la pera, me parece una tarea muy liosa y que ya podian haber hecho algo mas parecida a la simple ejecucion de un EXE para instalar.


Comentario de Moderador

@Paco_Diaz, te he borrado el post duplicado y, cuando quieras dar las gracias, aparte de hacerlo por aquí, siempre que sea necesario y no sea un simple gracias, puedes hacerlo también, agradeciéndolo en el post que ha publicado la otra persona, de esa manera, se le quedan "marcadas" la cantidad de gente y quién agradece.

Un salu2 a ambos.-

Paco_Diaz 7 de junio de 2023 14:04

Buenas.

@etilico2022, has probado a hacer más de una llamada desde un programa?, o sea, hacer mas de un call?

En caso de que sea así, te funciona?, porque a mi, no, asi que si me dices como lo has hecho te lo agradezco.

El error que ha llegado a darme (ahora no da error, simplemente no hace nada) es del tipo "no se encuentra el punto de entrada al procedimiento", por si te sirve como pista.

Al parecer este es un tipico error de C, porque, claro como usa GCC (que traduce a C como todos sabemos), pues los mensajes de error son de C.

Muchas gracias. Un saludo.

P.D.: He escrito este mensaje continuando el anterior, porque se me pasaron los 5 minutos para editarlo.

etilico2022 13 de junio de 2023 05:09

@Paco_Diaz Tengo varios Call en mi programa principal (ahí muestro un menú de opciones). En los programas llamados, hay que tener cuidado de agregar al final de de la ejecución lógica, el EXIT PROGRAM. Además, agrego al final del programa físico (.cbl), un END PROGRAM y el nombre que figura en PROGRAM-ID.

luisbago 13 de junio de 2023 20:18

call 'miprograma'.
cancel 'miprograma'.

el source de rmcobol, así compile y no fallo

Lavronacín 25 de julio de 2023 23:10

Buen dia. Consulta: ¿Cómo debe hacerse si se quiere hacer una llamada jerárquica? Es decir:
PROGRAMA principal
Call subprograma_1
Call subprograma_1_1
Call subprograma_1_2
Call subprograma_2
...

- - - Updated - - -

En el mensaje anterior se perdió la identacion. Pero la idea es: tengo el Programa Principal desde donde llamo a los subprogramas subprograma_1 y subprograma_2. Dentro de subprograma_1, quiero llamar a subprograma_1_1 y subprograma_1_2... Etc.

JCantero 26 de julio de 2023 00:23

@Lavronacín, pues dentro del subprograma _1 haces un call a subprograma-1-1.

Que problema te surge ?

Lavronacín 26 de julio de 2023 00:43

Pues, el mismo mensaje de "No encuentañra punto de entrada". Tanto subprograma_1 como subprograma_1_1 han sido compilados como módulos (dll)

JCantero 26 de julio de 2023 17:33

@Lavronacín, te pongo un ejemplo que funciona.

Atencion, el nombre del programa debe de estar bien escrito para identificarlo. Me refiero al "program-id. mundo2". "END PROGRAM mundo2." lo puedes suprimir.

Prueba y me dices si algo no te funciona. O pasa un ejemplo.

Programa inicial:

Código COBOL:
  1.      ******************************************************************
  2.      * Author:
  3.      * Date:
  4.      * Purpose:
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. mundo1.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        01 indice pic 9.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             DISPLAY "Hello world 1"
  16.             ACCEPT indice.
  17.             call 'mundo2'.
  18.             STOP RUN.
  19.        END PROGRAM mundo1.
  20.  

Programa llamado:

Código COBOL:
  1.      ******************************************************************
  2.      * Author:
  3.      * Date:
  4.      * Purpose:
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. mundo2.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        01 indice pic 9.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             DISPLAY "Hello world 2"
  16.             ACCEPT indice.
  17.            
  18.             STOP RUN.
  19.        END PROGRAM mundo2.

JCantero 26 de julio de 2023 17:46

@Lavronacín, otra cosa.....

Los programas llamados tienen que estar como modulos. O sea como .dll

El programa inicial como ejecutable. O sea como .exe

Lavronacín 26 de julio de 2023 18:13

Así mismo están
Y el mensaje sale "No encuentra punto de entrada". ¿Desde un .DLL se puede llamar a otro .DLL?

JCantero 26 de julio de 2023 22:08

@Lavronacín, si pero solo desde el entorno de trabajo.

Si lo pones en producción y lo ejecutas desde la linea de comandos el primer programa debe de ser .exe, el resto modulos .dll

Te funciona el ejemplo que te he enviado ?

Si no te funciona tu programa pon aqui lo que no te funciona para que veamos el problema.

Lavronacín 31 de julio de 2023 18:23

Estimado, buen día.
Disculpa que no pude responder antes. Mira: te pongo fuentes de ejemplo de lo que deseo implementar:
Nota: El programa principal lo compilo como ejecutable, los otros como DLL. Y tanto el Exe como los DLL están en la misma carpeta.
Programa Principal:
---------------------
Código COBOL:
  1.      ******************************************************************
  2.      * Author: Lavronacin
  3.      * Date: 31/07/2023
  4.      * Purpose: Verificar llamadas de subprogramas
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. PRGEjem01.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        77  Aceptar_Opcion    Pic X(01) Value Spaces.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             Display " " Blank Screen Line 01 column 01.
  16.             Display "Soy el programa principal PRGEjem01"
  17.                     Line 09 column 05
  18.             Display "Voy a llamar a PRGEjem01_01"
  19.                      line 10 column 05.
  20.             Accept Aceptar_Opcion line 10 column 79.
  21.             Call "bin\PRGEjem01_01".
  22.             STOP RUN.
  23.        END PROGRAM PRGEjem01.

Subprograma de nivel 1 que quiero ejecutar:
---------------------------
Código COBOL:
  1. ******************************************************************
  2.      * Author: Lavronacin
  3.      * Date: 31/07/2023
  4.      * Purpose: Verificar llamadas de subprogramas
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. PRGEjem01_01.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        77  Aceptar_Opcion    Pic X(01) Value Spaces.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             Display "Soy el programa PRGEjem01_01"
  16.                     Line 12 column 10
  17.             Display "Voy a llamar a PRGEjem01_A"
  18.                      line 13 column 10.
  19.             Display " Y voy a llamar a PRGEjem01_B"
  20.                      line 14 column 10.
  21.             Accept Aceptar_Opcion line 14 column 79.
  22.             Call "PRGEjem01_A".
  23.             Call "PRGEjem01_B"
  24.             STOP RUN.
  25.        END PROGRAM PRGEjem01_01.

Subprograma de nivel 2 que quiero ejecutar:
----------------------------------------------
Código COBOL:
  1. ******************************************************************
  2.      * Author: Lavronacin
  3.      * Date: 31/07/2023
  4.      * Purpose: Verificar llamadas de subprogramas
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. PRGEjem01_A.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        77  Aceptar_Opcion    Pic X(01) Value Spaces.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             Display "Soy el programa PRGEjem01_A"
  16.                     Line 16 column 10
  17.             Display "me llamó PRGEjem01_01"
  18.                      line 17 column 10.
  19.             Accept Aceptar_Opcion line 17 column 79.
  20.             STOP RUN.
  21.        END PROGRAM PRGEjem01_A.

Otro subprograma de nivel 2 que quiero ejecutar:
-----------------------------------------------------
Código COBOL:
  1. ******************
  2.      * Author: Lavronacin
  3.      * Date: 31/07/2023
  4.      * Purpose: Verificar llamadas de subprogramas
  5.      * Tectonics: cobc
  6.      ******************************************************************
  7.        IDENTIFICATION DIVISION.
  8.        PROGRAM-ID. PRGEjem01_B.
  9.        DATA DIVISION.
  10.        FILE SECTION.
  11.        WORKING-STORAGE SECTION.
  12.        77  Aceptar_Opcion    Pic X(01) Value Spaces.
  13.        PROCEDURE DIVISION.
  14.        MAIN-PROCEDURE.
  15.             Display "Soy el programa PRGEjem01_B"
  16.                     Line 19 column 10
  17.             Display "me llamó PRGEjem01_01"
  18.                      line 20 column 10.
  19.             Accept Aceptar_Opcion line 20 column 79.
  20.             STOP RUN.
  21.        END PROGRAM PRGEjem01_B.

JCantero 31 de julio de 2023 20:53

@Lavronacín, asi no

Código COBOL:
  1. Call "binPRGEjem01_01".

asi si

Código COBOL:
  1. Call "PRGEjem01_01".

y verifica que esta compilado como modulo y existe el .DLL


La franja horaria es GMT +2. Ahora son las 02:33.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.