Resultados 1 al 6 de 6

Tema: Obtener la dirección de una función PowerCOBOL

  1. #1
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Ayer 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

    Ayuda Obtener la dirección de una función PowerCOBOL

    Amigos, no encuentro ningún modo de obtener la dirección de una función para pasarla por un POINTER.

    En los manuales de PowerCOBOL 3, viene PROCEDURE-POINTER como palabra reservada, pero no compila con ello. Pero ese problema lo tengo resuelto simplemente definiendo el puntero como POINTER y pasándolo a las funciones de WinAPI funciona perfectamente (en realidad viene a ser el mismo DWORD de 4 bytes).

    En PowerCOBOL 9 existe un modo de hacerlo con la sintaxis adaptada de MicroFocus:

    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  WS-PTR           PROCEDURE-POINTER.
    3.  PROCEDURE DIVISION.
    4.  
    5.      SET WS-PTR TO ENTRY "MiPrograma"

    Pero esta sintaxis no funciona en PowerCOBOL 3...
    Para poder usar la API GetProcAddress la función debe estar en una DLL y definida como exportada (dllexport). Pero esto no me sirve, al menos, incluso si es posible, me complicaría muchísimo las cosas.

    ¿Alguna idea de cómo podría obtener esa dirección de una función codificada en la "PROCEDURE" de un SHEET? Es que con todas las posibilidades que tiene el Power 3, debe haber un modo de hacerlo.

    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.

  2. #2
      Gran amigo y Guru de COBOL
    Avatar de Rapinto

    Registrado
    febrero de 2015
    Ubicación
    Porto
    Mensajes
    246
    Última visita
    29.01.2018

    Agradecimientos
     
    Recibidos
    227
    Enviados
    19

    Citaciones y menciones
     
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    19
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0 Guru de los Gurus / Point Value: 0

    Predeterminado

    KUK,

    Não sei se percebi bem o que pretendes (eu não uso o Power 3).

    Será que utilizando o "depends.exe" da Microsoft, conseguirias saber o address??
    Envio em anexo o exe.

    Un Saludo,
    Rui Pinto
    Ficheros adjuntos Ficheros adjuntos

    0 Not allowed!

  3. #3
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Ayer 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

    @Rapinto, el Depends obtiene las funciones exportadas, las "public" por decirlo de alguna forma. Esas funciones exportadas sólo pueden estar en una DLL, y ser llamadas desde otras aplicaciones (sea DLL o EXE). En este caso hablamos de una funcion interna, que no es visible desde fuera, además en un EXE no se puede exportar funciones porque no son librerías dinámicas...

    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. #4
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Ayer 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

    He intentado de todas las menaras posibles, y he llegado a la conclusión de que simplemente el compilador no acepta PROCEDURE-POINTER. Por lo pronto, declarando un campo como tal ni si quiera compila... Y luego, realmente lo que hace en PowerCOBOL posteriores con la sentencia siguiente:

    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.  01  PPTR              PROCEDURE-POINTER
    3.  
    4.  PROCEDURE DIVISION.
    5.      
    6.      SET PPTR TO ENTRY "MyEntry"

    Es simplemente reemplazar PPTR por la dirección de la función, que es calculada justamente a la hora de compilar/linkear (el offset).

    Con lo cual, es una pena, pero no se puede hacer nada con PROCEDURE-POINTER...

    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.

  5. #5
      Forero
    Avatar de Dasije

    Registrado
    noviembre de 2015
    Ubicación
    Jerez De La Frontera (cádiz)
    Mensajes
    182
    Última visita
    06.03.2022

    Agradecimientos
     
    Recibidos
    79
    Enviados
    1

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

    Predeterminado

    La única manera de obtener el puntero de una función es usando la API de Windows, en Windev por ejemplo lo hago así y funciona, hay que obtener primero el handle de la DLL cuando se carga en memoria.

    WinDev Código:
    1. handle_DLL is system int = LoadDLL(archivo_DLL)
    2.  
    3. IF handle_DLL = 0 THEN
    4.     RESULT False
    5. ELSE
    6.     puntero_API is system int = API("KERNEL32","GetProcAddress",handle_DLL,funcion)
    7.     FreeDLL(handle_DLL)
    8.     RESULT puntero_API
    9. END

    0 Not allowed!
    Empresa de desarrollo de aplicaciones en COBOL.

    DASIJE INFORMATICA, S.L.
    C/ TOMAS BRETON 20
    11406 JEREZ DE LA FRONTERA
    CADIZ

    Teléfono : 956 11 21 11
    Web: http://www.dasije.es / DASIJE INFORMATICA
    E-m@il: clientes(@)dasije.es

  6. #6
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    39
    Mensajes
    2,287
    Última visita
    Ayer 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

    @Dasije, esto funciona con una DLL pero no con un EXE porque el último normalmente no exporta ninguna función secundaria.

    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.

Información de Tema

Usuarios Viendo este Tema

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

Temas Similares

  1. [Aporte] Obtener la version de SO Windows
    Por Kuk en el foro Cocina PowerCOBOL + WinAPI
    Respuestas: 3
    Último Mensaje: 06.06.2018, 05:22
  2. [Sintaxis] Nueva función SUBSTITUTE
    Por Kuk en el foro GnuCOBOL (OpenCOBOL)
    Respuestas: 1
    Último Mensaje: 07.03.2017, 20:34
  3. [Sintaxis] Obtener el Directorio de la aplicación
    Por Eslopes en el foro PowerCOBOL V3L10 (Win32)
    Respuestas: 2
    Último Mensaje: 21.06.2016, 15:26
  4. [Aporte] Obtener el Handle (HWND) de un control
    Por Kuk en el foro Cocina PowerCOBOL V3L10
    Respuestas: 0
    Último Mensaje: 21.12.2015, 21:53
  5. [Sintaxis] Obtener una ruta en Red
    Por Roger en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 16
    Último Mensaje: 01.05.2015, 22: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
  •