![]() |
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:
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. |
1 Archivos Adjunto(s)
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 |
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...
|
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:
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... |
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:
|
Dasije, esto funciona con una DLL pero no con un EXE porque el último normalmente no exporta ninguna función secundaria.
|
| La franja horaria es GMT +2. Ahora son las 13:51. |
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.