Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > Cocina Casera > Cocina PowerCOBOL
Cocina PowerCOBOL Rutinas y ejemplos codificados por nuestros foreros.
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Información] Enviar aviso "Sin conexion a internet" Gatomalo PowerCOBOL (ActiveX, v4 - v11) 11 26 de octubre de 2020 14:19
"Aquí no hay quién viva" cumple 15 años Kuk Espacio "Offtop" 0 8 de marzo de 2018 09:36
[Sintaxis] Error MOVE "Parent" de un nodo "Root" en TreeView dmosca PowerCOBOL (ActiveX, v4 - v11) 1 23 de agosto de 2017 07:47
[Sintaxis] Obtener la propiedad "Name" del Form en ejecución Fito PowerCOBOL (ActiveX, v4 - v11) 4 18 de julio de 2016 23:47
[Sintaxis] Imprimir PDF desde DOS (CALL "SYSTEM") Roger RM/COBOL 1 1 de julio de 2016 15:40
Respuesta
 
Herramientas

  #11
Antiguo 3 de agosto de 2016, 19:32
IDENTIFICATION DIVISION
Hrmcobol
 Guardián del Foro
Guardián del Foro: Guardián del espíritu y clima del Foro - Razón: Por implicación en la vida del Foro 
ENVIRONMENT DIVISION
Avatar de Hrmcobol
DATA DIVISION
febrero 2015
Puerto Madryn
69 años
08.10.2021 16:00
PROCEDURE DIVISION
Posts: 321
Enviado: 106
Recibido: 118
Soluiones: 10
Reputación: 18
Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light Hrmcobol is a glorious beacon of light
Predeterminado

Estimados adjunto las lineas finales de la llamada
Mi problema era que definía mal las variables NUMX ya que no conocía/entendía/etc la declaración BINARY-SHORT / BINARY-LONG

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  FUNC   PIC  X(20).        
  5.  01  ReturnValue  PIC S9(04) COMP-5.
  6.  
  7.  77  NUM1   USAGE BINARY-SHORT SIGNED. *> Variable Short la rutina programada en "C"
  8.  77  NUM2   USAGE BINARY-SHORT SIGNED.
  9.  77  NUM3   USAGE BINARY-LONG  SIGNED. *> Variable Long  la rutina programada en "C"
  10.  77  NUM4   USAGE BINARY-LONG  SIGNED.
  11.  77  NUM5   USAGE BINARY-SHORT SIGNED.
  12.  
  13.  PROCEDURE       DIVISION.
  14.          
  15.      MOVE "mluser"    TO FUNC
  16.      MOVE 1           TO NUM1
  17.      MOVE 1           TO NUM2
  18.      MOVE 1000        TO NUM3
  19.      MOVE -1800027647 TO NUM4
  20.      MOVE 0           TO NUM5
  21.      MOVE ZEROS       TO ReturnValue
  22.  
  23.      CALL FUNC WITH STDCALL LINKAGE
  24.           USING BY VALUE NUM1
  25.                 BY VALUE NUM2
  26.                 BY VALUE NUM3
  27.                 BY VALUE NUM4
  28.                 BY VALUE NUM5
  29.                 RETURNING ReturnValue
  30.      END-CALL
  31.  
  32.      IF  ReturnValue = ZEROS Display "Correcto"
  33.                         ELSE Display "Error Numero: " ReturnValue
  34.      END-IF

El Archivo COBOL85.CBR

Código COBOL:
  1. [F-009001.Entry]                     <--- Nombre del Form que llama la Dll Exterma -> F-090001
  2. mluser=MLUSERXX.DLL                  <--- La Dll externa se llama -> MLUSERXX.DLL                      
  3. FtpConnect=MLUSERXX.dll              <---
  4. FtpDisconnect=MLUSERXX.dll           <---
  5. LogIn=Protocol.dll
  6. InvalidateRect=User32.dll    

Tal cual lo describio KUK en el inicio del post

Saludos y Gracias Por Estar Alli !!!!
Hrmcobol no ha iniciado sesión   Responder Con Cita
Han dicho Gracias: 2
Nitzer ( 2 de febrero de 2017), Recato53 ( 2 de febrero de 2017)
  #12
Antiguo 4 de febrero de 2017, 10:47
IDENTIFICATION DIVISION
Recato53
 Patrocinador del Foro
ENVIRONMENT DIVISION
Avatar de Recato53
DATA DIVISION
febrero 2015
Valladolid
23.07.2020 11:16
PROCEDURE DIVISION
Posts: 77
Enviado: 72
Recibido: 11
Soluiones: 2
Reputación: 7
Recato53 is on a distinguished road
Predeterminado

Buenos días.

Quiero comprobar si existe conexión a internet.
He probado todo las opciones que he encontrado en el Foro, algo estoy programando mal.
Intento usar COBOL85.CBR y desde el programa de PowerCobol llamo a la función. Pero responde con u mensaje de ERROR.

Cita del post de Kuk Ver Mensaje
Hrmcobol, en tu COBOL85.CBR, al final del fichero debe añadir (cambiando MainForm por el nombre del Form que va a llamar la DLL):

Código:
[MainForm.Entry]
mluser=MLUSER32.DLL
En el Form que llama la DLL pones:

Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  FUNC  PIC X(20).
  5.  01  NUM1  PIC S9(9) COMP-5.
  6.  01  NUM2  PIC S9(9) COMP-5.
  7.  01  NUM3  PIC S9(9) COMP-5.
  8.  01  NUM4  PIC S9(9) COMP-5.
  9.  PROCEDURE       DIVISION.
  10.          
  11.      MOVE "mluser" TO FUNC
  12.      
  13.      CALL FUNC WITH STDCALL USING BY VALUE NUM1
  14.                                   BY VALUE NUM2
  15.                                   BY VALUE NUM3
  16.                                   BY VALUE NUM4

Debes poner MLUSER32.DLL en el mismo directorio que tu programa PowerCOBOL.

Si no te sale aún, dime más concretamente qué es exactamente lo que no logras hacer
Adjunto ejemplo del programa.
Archivos Adjuntos
Tipo de Archivo: rar Conexion Internet.rar (4,7 KB, 20 descargas Quién descargó)
Recato53 no ha iniciado sesión   Responder Con Cita
  #13
Antiguo 4 de febrero de 2017, 11:24
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.10.2021 17:23
PROCEDURE DIVISION
Posts: 1.833
Enviado: 586
Recibido: 765
Soluiones: 95
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Amigo Recato53, el fichero COBOL85.CBR lo tienes que poner en el mismo directorio que el ejecutable (en la carpeta mi_projecto\DEBUG), si no lo haces no va a funcionar. El ejecutable cuando arranca, por medio del Run-Time se busca el fichero COBOL85.CBR en el mismo directorio, y la lista de ENTRY-s que hay en realidad se cargan vía "LoadLibrary" y "GetProcAddress" pero se hace por el Run-Time y no por nosotros.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Recato53 ( 4 de febrero de 2017)
  #14
Antiguo 4 de febrero de 2017, 11:47
IDENTIFICATION DIVISION
Recato53
 Patrocinador del Foro
ENVIRONMENT DIVISION
Avatar de Recato53
DATA DIVISION
febrero 2015
Valladolid
23.07.2020 11:16
PROCEDURE DIVISION
Posts: 77
Enviado: 72
Recibido: 11
Soluiones: 2
Reputación: 7
Recato53 is on a distinguished road
Predeterminado

Cita del post de Kuk Ver Mensaje
Amigo Recato53, el fichero COBOL85.CBR lo tienes que poner en el mismo directorio que el ejecutable (en la carpeta mi_projecto\DEBUG), si no lo haces no va a funcionar. El ejecutable cuando arranca, por medio del Run-Time se busca el fichero COBOL85.CBR en el mismo directorio, y la lista de ENTRY-s que hay en realidad se cargan vía "LoadLibrary" y "GetProcAddress" pero se hace por el Run-Time y no por nosotros.
Pongo el fichero en donde me dices y sigue dando el mismo error.
Recato53 no ha iniciado sesión   Responder Con Cita
  #15
Antiguo 4 de febrero de 2017, 14:10
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.10.2021 17:23
PROCEDURE DIVISION
Posts: 1.833
Enviado: 586
Recibido: 765
Soluiones: 95
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Recato53, también tienes mal escrito el nombre de la función InternetCheckConnectionA en el fichero COBOL85.CBR. Tienes InternetcheckConnectionA en vez de InternetCheckConnectionA, en caso de rutinas C y WinAPI las minúsculas/mayúsculas importan.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Recato53 ( 5 de febrero de 2017)
  #16
Antiguo 5 de febrero de 2017, 20:34
IDENTIFICATION DIVISION
Recato53
 Patrocinador del Foro
ENVIRONMENT DIVISION
Avatar de Recato53
DATA DIVISION
febrero 2015
Valladolid
23.07.2020 11:16
PROCEDURE DIVISION
Posts: 77
Enviado: 72
Recibido: 11
Soluiones: 2
Reputación: 7
Recato53 is on a distinguished road
Predeterminado

Muchas gracias KUK.

Por fin funciona la rutina para testear si hay conexión a internet.

Si llamo a este programa (.exe) desde un programa en PowerCobol(.DLL), como recupero el valor en el programa de PowerCobol.
Recato53 no ha iniciado sesión   Responder Con Cita
  #17
Antiguo 6 de febrero de 2017, 09:07
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.10.2021 17:23
PROCEDURE DIVISION
Posts: 1.833
Enviado: 586
Recibido: 765
Soluiones: 95
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Recato53, ¿por qué lo quieres hacer como un EXE? Haz una simple rutina COBOL y a llamas donde la necesites.

Pero si quieres hacerlo como dices, y no quieres que sea un DLL sino un EXE... Puedes intentar hacer un MOVE al RETURN-CODE en el EXE, y en el programa llamante recibes dicho valor en el campo RETURNING. Pruébalo y nos cuentas.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #18
Antiguo 9 de febrero de 2017, 15:44
IDENTIFICATION DIVISION
Recato53
 Patrocinador del Foro
ENVIRONMENT DIVISION
Avatar de Recato53
DATA DIVISION
febrero 2015
Valladolid
23.07.2020 11:16
PROCEDURE DIVISION
Posts: 77
Enviado: 72
Recibido: 11
Soluiones: 2
Reputación: 7
Recato53 is on a distinguished road
Predeterminado

Cita del post de Kuk Ver Mensaje
Recato53, ¿por qué lo quieres hacer como un EXE? Haz una simple rutina COBOL y a llamas donde la necesites.

Pero si quieres hacerlo como dices, y no quieres que sea un DLL sino un EXE... Puedes intentar hacer un MOVE al RETURN-CODE en el EXE, y en el programa llamante recibes dicho valor en el campo RETURNING. Pruébalo y nos cuentas.
Buenas tardes.
La estructura de carpetas que empleo en mis aplicaciones es la siguiente:

\Aplicación
\Aplicación\Datos
\Aplicación\Programas (aquí están todas las 'dll' , 'exe' y archivos necesarios para ejecutar la aplicación).

El programa que ejecuta la aplicación esta en \Aplicación\Aplicacion.exe

Desde una 'dll' llamo a la rutina que quiero comprobar si hay conexión a Internet.

Como el archivo COBOL85.CBR tiene que estar en la misma carpeta del programa que llama a esta rutina, necesito recuperar el valor en la DLL que resulta de llamar a la rutina 'exe'.

Según me indicas puedo programar RETURN-CODE y recogerlo con RETURNING, me puedes hacer llegar un ejemplo, no consigo que esto me funciones.

Muchas gracias.
Un saludo.
Recato53 no ha iniciado sesión   Responder Con Cita
  #19
Antiguo 9 de febrero de 2017, 16:07
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
diciembre 2014
Madrid
36 años
19.10.2021 17:23
PROCEDURE DIVISION
Posts: 1.833
Enviado: 586
Recibido: 765
Soluiones: 95
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

Recato53, a ver, no me estoy enterando de cual es el problema con el COBOL85.CBR. Puede haber varios por aplicación, pero sólo 1 por directorio. Es decir, puedes tener uno en \Aplicación\ y otro \Aplicación\Programas\.

Así que:
  1. El fichero COBOL85.CBR tiene que estar en \Aplicación\Programas\ (donde está el programa Comprueba_Conexion.exe).
  2. Aplicacion.exe va a llamar a \Aplicación\Programas\DLL-1
  3. DLL-1 va a llamar al Comprueba_Conexion.exe

En cuanto lo que dije sobre el RC, me he equivocado, no va a ser posible, porque estamos en mundo GUI y hay subrutinas que se ejecutan después de salir del código COBOL. Pero tengo una idea y te la voy a explicar en un tema separado



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #20
Antiguo 29 de julio de 2017, 19:11
IDENTIFICATION DIVISION
Recato53
 Patrocinador del Foro
ENVIRONMENT DIVISION
Avatar de Recato53
DATA DIVISION
febrero 2015
Valladolid
23.07.2020 11:16
PROCEDURE DIVISION
Posts: 77
Enviado: 72
Recibido: 11
Soluiones: 2
Reputación: 7
Recato53 is on a distinguished road
Predeterminado

Kuk, Estoy desarrollando una rutina para pasar un archivo TXT, de ANSI a UTF-8 y viceversa cuando la tenga acabada y documentada, donde la tengo que cargar en el FORO.

Un saludo.
Recato53 no ha iniciado sesión   Responder Con Cita
Respuesta

Tags
call , cobol85.cbr , dll , lib


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 20:09.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.