Ver la Versión Completa : [Sintaxis] CALL en OPENCOBOLIDE 4.7.6 da error (no encuentra)
etilico2022
6 de septiembre de 2022, 18:55
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
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? (https://sourceforge.net/p/gnucobol/discussion/help/thread/72d26746/)
Tem que compilar dentro do mesmo EXE os vários programas.
- - - Updated - - -
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? (https://sourceforge.net/p/gnucobol/discussion/help/thread/72d26746/)
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 (https://opencobol.add1tocobol.com/)
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.
@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:
************************************************** ****************
* Author:
* Date:
* Purpose:
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. mundo1.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 indice pic 9.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "Hello world 1"
ACCEPT indice.
call 'mundo2'.
STOP RUN.
END PROGRAM mundo1.
Programa llamado:
************************************************** ****************
* Author:
* Date:
* Purpose:
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. mundo2.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
01 indice pic 9.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
DISPLAY "Hello world 2"
ACCEPT indice.
STOP RUN.
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:
---------------------
************************************************** ****************
* Author: Lavronacin
* Date: 31/07/2023
* Purpose: Verificar llamadas de subprogramas
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGEjem01.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Aceptar_Opcion Pic X(01) Value Spaces.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
Display " " Blank Screen Line 01 column 01.
Display "Soy el programa principal PRGEjem01"
Line 09 column 05
Display "Voy a llamar a PRGEjem01_01"
line 10 column 05.
Accept Aceptar_Opcion line 10 column 79.
Call "bin\PRGEjem01_01".
STOP RUN.
END PROGRAM PRGEjem01.
Subprograma de nivel 1 que quiero ejecutar:
---------------------------
************************************************** ****************
* Author: Lavronacin
* Date: 31/07/2023
* Purpose: Verificar llamadas de subprogramas
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGEjem01_01.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Aceptar_Opcion Pic X(01) Value Spaces.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
Display "Soy el programa PRGEjem01_01"
Line 12 column 10
Display "Voy a llamar a PRGEjem01_A"
line 13 column 10.
Display " Y voy a llamar a PRGEjem01_B"
line 14 column 10.
Accept Aceptar_Opcion line 14 column 79.
Call "PRGEjem01_A".
Call "PRGEjem01_B"
STOP RUN.
END PROGRAM PRGEjem01_01.
Subprograma de nivel 2 que quiero ejecutar:
----------------------------------------------
************************************************** ****************
* Author: Lavronacin
* Date: 31/07/2023
* Purpose: Verificar llamadas de subprogramas
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGEjem01_A.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Aceptar_Opcion Pic X(01) Value Spaces.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
Display "Soy el programa PRGEjem01_A"
Line 16 column 10
Display "me llamó PRGEjem01_01"
line 17 column 10.
Accept Aceptar_Opcion line 17 column 79.
STOP RUN.
END PROGRAM PRGEjem01_A.
Otro subprograma de nivel 2 que quiero ejecutar:
-----------------------------------------------------
******************
* Author: Lavronacin
* Date: 31/07/2023
* Purpose: Verificar llamadas de subprogramas
* Tectonics: cobc
************************************************** ****************
IDENTIFICATION DIVISION.
PROGRAM-ID. PRGEjem01_B.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
77 Aceptar_Opcion Pic X(01) Value Spaces.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
Display "Soy el programa PRGEjem01_B"
Line 19 column 10
Display "me llamó PRGEjem01_01"
line 20 column 10.
Accept Aceptar_Opcion line 20 column 79.
STOP RUN.
END PROGRAM PRGEjem01_B.
JCantero
31 de julio de 2023, 20:53
@Lavronacín, asi no
Call "binPRGEjem01_01".
asi si
Call "PRGEjem01_01".
y verifica que esta compilado como modulo y existe el .DLL
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.