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 > Fujitsu COBOL > PowerCOBOL V3L10 (Win32)
PowerCOBOL V3L10 (Win32) IDE Freeware compatible con Windows 7/8/10
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Aporte] Obtener la version de SO Windows Kuk Cocina PowerCOBOL + WinAPI 3 6 de junio de 2018 05:22
[Sintaxis] Nueva función SUBSTITUTE Kuk GnuCOBOL (OpenCOBOL) 1 7 de marzo de 2017 20:34
[Sintaxis] Obtener el Directorio de la aplicación Eslopes PowerCOBOL V3L10 (Win32) 2 21 de junio de 2016 15:26
[Aporte] Obtener el Handle (HWND) de un control Kuk Cocina PowerCOBOL V3L10 0 21 de diciembre de 2015 21:53
[Sintaxis] Obtener una ruta en Red Roger PowerCOBOL (ActiveX, v4 - v11) 16 1 de mayo de 2015 22:40
Respuesta
 
Herramientas

  #1
Antiguo 5 de noviembre de 2015, 11:15
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
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
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:

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



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
  #2
Antiguo 6 de noviembre de 2015, 00:50
IDENTIFICATION DIVISION
Rapinto
 Gran amigo del Foro y Guru de COBOL
Activista del Foro: Activista del Foro - Razón: ¡Gracias!  Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por ayudar mucho a los foreros  Guru de los Gurus: Por solidos y amplios conocimientos - Razón: Por saber demasiado! 
ENVIRONMENT DIVISION
Avatar de Rapinto
DATA DIVISION
febrero 2015
Porto
29.01.2018 20:23
PROCEDURE DIVISION
Posts: 246
Enviado: 19
Recibido: 225
Soluciones: 47
Reputación: 16
Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road Rapinto is on a distinguished road
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
Archivos Adjuntos
Tipo de Archivo: zip depends.zip (596,7 KB, 65 descargas Quién descargó)
Rapinto no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk ( 6 de noviembre de 2015)
  #3
Antiguo 6 de noviembre de 2015, 10:12
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
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

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...



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
  #4
Antiguo 22 de febrero de 2016, 11:21
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
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

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:

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



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
  #5
Antiguo 11 de octubre de 2018, 18:16
IDENTIFICATION DIVISION
Dasije
 Forero
ENVIRONMENT DIVISION
Avatar de Dasije
DATA DIVISION
noviembre 2015
Jerez De La Frontera (cádiz)
03.10.2021 21:42
PROCEDURE DIVISION
Posts: 182
Enviado: 1
Recibido: 79
Soluciones: 7
Reputación: 14
Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road Dasije is on a distinguished road
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.

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


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
Dasije no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 11 de octubre de 2018, 21:06
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
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

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



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
Respuesta

Tags
address , callback , procedure-pointer


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 10:39.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.