Página 2 de 3 PrimerPrimer 1 2 3 ÚltimoÚltimo
Resultados 11 al 20 de 21

Tema: CALL de cualquier DLL sin *.LIB ni "LoadLibrary"

  1. #11
      Guardián del Foro
    H

    Registrado
    febrero de 2015
    Ubicación
    Puerto Madryn
    Edad
    72
    Mensajes
    328
    Última visita
    23.06.2023

    Agradecimientos
     
    Recibidos
    122
    Enviados
    107

    Citaciones y menciones
     
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    21
    Guardián del Foro / Point Value: 0

    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

    COBOL Código:
    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

    COBOL Código:
    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 !!!!

    0 Not allowed!

  2. #12
      Patrocinador del Foro
    R

    Registrado
    febrero de 2015
    Ubicación
    Valladolid
    Mensajes
    79
    Última visita
    13.03.2024

    Agradecimientos
     
    Recibidos
    11
    Enviados
    72

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    10

    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 Iniciado por 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):

    CODE Código:
    1. [MainForm.Entry]
    2. mluser=MLUSER32.DLL

    En el Form que llama la DLL pones:

    COBOL Código:
    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.
    Ficheros adjuntos Ficheros adjuntos

    0 Not allowed!

  3. #13
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Hoy a las 21:23

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  4. #14
      Patrocinador del Foro
    R

    Registrado
    febrero de 2015
    Ubicación
    Valladolid
    Mensajes
    79
    Última visita
    13.03.2024

    Agradecimientos
     
    Recibidos
    11
    Enviados
    72

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    10

    Predeterminado

    Cita Iniciado por 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.

    0 Not allowed!

  5. #15
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Hoy a las 21:23

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  6. #16
      Patrocinador del Foro
    R

    Registrado
    febrero de 2015
    Ubicación
    Valladolid
    Mensajes
    79
    Última visita
    13.03.2024

    Agradecimientos
     
    Recibidos
    11
    Enviados
    72

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!

  7. #17
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Hoy a las 21:23

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  8. #18
      Patrocinador del Foro
    R

    Registrado
    febrero de 2015
    Ubicación
    Valladolid
    Mensajes
    79
    Última visita
    13.03.2024

    Agradecimientos
     
    Recibidos
    11
    Enviados
    72

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    10

    Predeterminado

    Cita Iniciado por 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.

    0 Not allowed!

  9. #19
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Hoy a las 21:23

    Agradecimientos
     
    Recibidos
    1,036
    Enviados
    888

    Citaciones y menciones
     
    Mentioned
    102 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    31 Post(s)
    Poder de Reputación
    10

    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

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  10. #20
      Patrocinador del Foro
    R

    Registrado
    febrero de 2015
    Ubicación
    Valladolid
    Mensajes
    79
    Última visita
    13.03.2024

    Agradecimientos
     
    Recibidos
    11
    Enviados
    72

    Citaciones y menciones
     
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    10

    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.

    0 Not allowed!

Página 2 de 3 PrimerPrimer 1 2 3 ÚltimoÚltimo

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. [Información] Enviar aviso "Sin conexion a internet"
    Por Gatomalo en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 11
    Último Mensaje: 26.10.2020, 15:19
  2. "Aquí no hay quién viva" cumple 15 años
    Por Kuk en el foro Espacio "Offtop"
    Respuestas: 0
    Último Mensaje: 08.03.2018, 10:36
  3. [Sintaxis] Error MOVE "Parent" de un nodo "Root" en TreeView
    Por dmosca en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 1
    Último Mensaje: 23.08.2017, 08:47
  4. [Sintaxis] Obtener la propiedad "Name" del Form en ejecución
    Por Fito en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 4
    Último Mensaje: 19.07.2016, 00:47
  5. [Sintaxis] Imprimir PDF desde DOS (CALL "SYSTEM")
    Por Roger en el foro RM/COBOL
    Respuestas: 1
    Último Mensaje: 01.07.2016, 16:40

Etiquetas para este Tema

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •