Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL v3 (V3L10, Win32)
PowerCOBOL v3 (V3L10, Win32) IDE Freeware compatible con Windows 7/8/10/11
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
funcion NTVDN ENRIQUE Presentación 1 18 de marzo de 2023 20:13
Obtener la longitud del contenido de una variable Kuk Cocina Casera 12 19 de marzo de 2021 19:49
[Duda] Teclas de Funcion F13 - F24 jotica PowerCOBOL (ActiveX, v4 - v11) 6 8 de mayo de 2017 12:48
[Sintaxis] Nueva función SUBSTITUTE Kuk GnuCOBOL (OpenCOBOL) 1 7 de marzo de 2017 20:34
[Sintaxis] Obtener una ruta en Red Roger PowerCOBOL (ActiveX, v4 - v11) 16 1 de mayo de 2015 22:40

Respuesta

  #1
Antiguo 5 de noviembre de 2015, 11:15
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207
Sonrisa Obtener la dirección de una función PowerCOBOL
0 Inactivo Inactivo

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 is offline   Responder Con Cita
  #2
Antiguo 6 de noviembre de 2015, 00:50
Rapinto
Gran amigo del Foro
Guru de COBOL
Activista del Foro: Activista del Foro - Issue reason: ¡Gracias! Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por ayudar mucho a los foreros Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por saber demasiado! 
Última Actividad 29.01.2018 20:23
Posts Posts: 240
Likes enviados Enviados: 19
Likes recibidos Recibidos: 224

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)Descargas: 295
Rapinto is offline   Responder Con Cita
  #3
Antiguo 6 de noviembre de 2015, 10:12
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

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 is offline   Responder Con Cita
  #4
Antiguo 22 de febrero de 2016, 11:21
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

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 is offline   Responder Con Cita
  #5
Antiguo 11 de octubre de 2018, 18:16
Dasije
Forero Senior
Última Actividad 06.03.2022 17:04
Posts Posts: 173
Likes enviados Enviados: 1
Likes recibidos Recibidos: 79

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 is offline   Responder Con Cita
  #6
Antiguo 11 de octubre de 2018, 21:06
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

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 is offline   Responder Con Cita
Respuesta


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

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:57.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.