Iniciar Sesión

Ver la Versión Completa : [Duda] Como insertar un programa C en POWER COBOL 9


FabioYeyo
17 de abril de 2017, 22:59
Amigos.

No se como insertar un programa C en POWER COBOL 9.

Saludos

Kuk
17 de abril de 2017, 23:58
FabioYeyo, no se puede hacer lo que dices porque PowerCOBOL es un compilador de COBOL y no de C. En este caso lo que tienes que haces es compilar tu programa C en un entorno de C (sea Dev C++, Visual C++, C++ Builder o cualquier otro) y linkearlo en una DLL exportando la función que necesitas. Luego desde PowerCOBOL llamar dicha función.

Si no sabes cómo compilar el programa C y crear la DLL correspondiente, haz una pregunta en este sub-foro: C/C++ - COBOL Foro (http://cobolforo.es/forumdisplay.php?f=40)

Para llamar tu función C cuando crees la DLL, debes hacerlo de la siguiente manera: [Aporte] CALL de cualquier DLL sin *.LIB ni "LoadLibrary" - COBOL Foro (http://cobolforo.es/showthread.php?t=216)

FabioYeyo
19 de abril de 2017, 17:24
Kuk.

Estoy de acuerdo contigo en que POWER COBOL es un compilador de Cobol y no de C lo que pasa es que no me supe explicar bien mi problema es que hice un .obj de el pograma C y cuando inserte el .obj en PowerCobol me da error pense que podia solucionarlo de esta forma.

Gracias

Kuk
19 de abril de 2017, 17:46
FabioYeyo, en teoría se puede añadir archivos objeto en un proyecto de PowerCOBOL. Haz un pantallazo del error que te da y ponlo aquí.

FabioYeyo
19 de abril de 2017, 18:15
Kuk.

El error que me da es el siguiente.
DES.obj : fatal error LNK1123:failure during conversion to COFF: file invalid o corrupt

Gracias.

---------- Post añadido : 16:15 ---------- Post anterior : 16:14 ----------

Kuk.

El error lo da en el momento fe hacer el link.
gracias.

Kuk
19 de abril de 2017, 18:23
FabioYeyo, parece ser problema del LINK incremental (https://msdn.microsoft.com/en-us/library/4khtbfyf(v=vs.100).aspx).

Intenta haciendo click con el botón derecho en el módulo donde incluyes el OBJ (sea EXE o DLL) y en la pestaña LINK le pones la opción del pantallazo que te pongo.

FabioYeyo
19 de abril de 2017, 18:29
Kuk.

Sigue dando el mismo error.

Gracias.

Aqui te envio el programa fuente en C y el obj tengo temor de que algo este mal no soy especialista en lenguaje C

Roberto.

Kuk
19 de abril de 2017, 18:53
FabioYeyo, a mi tampoco me funciona con tu OBJ...

Oye, nunca he visto esta sintaxis:


/************************************************** ********************/
/* pos(s,c) donne la premiere occurence du caractere c */
/* dans la chaine de caracteres s */
/************************************************** ********************/

UCHAR pos(s,c)
UCHAR s[];
UCHAR c;
{
UCHAR i;

i=0;
while ((s[i] != c) && (s[i] != '\0') && (i<255))
{
i++;
}
return(i);
}


O sea, declarando una función con 2 parámetros sin indicar su tipo, y luego justo debajo declarar dichos campos... De hecho, a mi ni me compila sin modificarlo en:


/************************************************** ********************/
/* pos(s,c) donne la premiere occurence du caractere c */
/* dans la chaine de caracteres s */
/************************************************** ********************/

UCHAR pos(UCHAR s[], UCHAR c)
{
UCHAR i;

i=0;
while ((s[i] != c) && (s[i] != '\0') && (i<255))
{
i++;
}
return(i);
}


¿Con qué compilador lo has compilado (y obtenido el OBJ)?

FabioYeyo
19 de abril de 2017, 21:21
Kuk.

El obj fue compilado con C standard pero en Unix Trust 64 lo que pasa es que yo lo estoy utilizando con Micro Focus Cobol/2 que es una version bastante vieja de Cobol y que solo funciona sobre DOS con esta version de cobol hago el LINK y funciona perfectamente solo que ahora queria mejorar la interface con el ususario utiliazando POWER COBOL 9 pues no sabes la batalla que tengo contra el resto de mis colegas soy el unico que programa en Cobol claro ellos son mucho mas jovenes pero les he demostrado que el POWER COBOL es una buena herramienta de programacion.

Kuk
19 de abril de 2017, 21:25
FabioYeyo, en este caso el formato puede diferir, a no ser que la compilación se haya hecho con un compilador cross-platform, pero teniendo en cuenta la antigüedad (y además siendo UNIX y no Linux) estoy seguro que no es el caso. Además, siendo compiladores antiguos, puede que estemos hablando incluso de un objeto de 16 bits.

Lo que te aconsejo en este caso es, sea intentar recompilarlo en un entorno de Windows (haciendo las modificaciones necesarias para que compile) e intentar linkear el nuevo OBJ, sea crear una DLL en Windows exportando la función necesaria y llamarla así.

Y es verdad, los jovenes (a los cuales pertenezco yo también aún, pero no es mi caso) consideran a COBOL como algo anticuado, pero no saben nada de él y es por eso, se basan en rumores y frases "célebres" como la de Dijkstra:

The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.

:D :D :D

Edsger W. Dijkstra - Wikiquote (https://en.wikiquote.org/wiki/Edsger_W._Dijkstra)

Kuk
20 de abril de 2017, 10:08
FabioYeyo, toma te he creado la DLL para Windows.

Para poder llamarla desde PowerCOBOL tienes hacer como se dice aquí: [Aporte] CALL de cualquier DLL sin *.LIB ni "LoadLibrary" - COBOL Foro (http://cobolforo.es/showthread.php?t=216)

La sintaxis de llamada a esta función será:


WORKING-STORAGE SECTION.
01 WS-FunctA PIC X(250).
01 WS-Format PIC X(250).
01 WS-PlainText PIC X(250).
01 WS-Key PIC X(250).
01 WS-CipherText PIC X(250).
01 RESP PIC S9(9) COMP-5.

01 DES PIC X(3) VALUE "DES".
PROCEDURE DIVISION.

CALL DES WITH STDCALL USING WS-FunctA
WS-Format
WS-PlainText
WS-Key
WS-CipherText
RETURNING RESP