Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] llamar a aplication externa .EXE hbetancur NetCOBOL 3 29 de mayo de 2021 11:58
[Sintaxis] Saber si un EXE se esta ejecutando ?? Hrmcobol PowerCOBOL y WinAPI 1 24 de noviembre de 2020 13:11
[Sintaxis] Compratir variable con un EXE de PowerCOBOL Recato53 PowerCOBOL (ActiveX, v4 - v11) 10 14 de febrero de 2017 17:18
[Compilador] Fujitsu Cobol for Windows Call EXE Joseg NetCOBOL 1 29 de octubre de 2016 23:18
[Compilador] Compilar un Ejecutable (.exe) Yonaider RM/COBOL 5 26 de mayo de 2016 09:19

Respuesta

  #21
Antiguo 11 de noviembre de 2024, 21:35
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Kuk , en el .EXE deje "EnumWindowsProc" y en la .DLL
solamente me ti y funciono
Código COBOL:
  1.     move pow-numeric of CmText1 to pid.
  2.      
  3.          
  4.      call "GetModuleHandleA" with stdcall using by value 0 returning hModule
  5.          
  6.      call "GetProcAddress" with stdcall using by value hModule
  7.                                               by content "_EnumWindowsProc@8" & X"00"
  8.                                               returning pAddress
  9.                                               display "pAddress: " , pAddress.
  10.      
  11.      call "EnumWindows" with stdcall using by value pAddress
  12.                                            by value pid
Pero viendo el error de @Joseg le inserte el "EnumWindowsProc" a la .DLL y seguia funcionando
Luego quite del .EXE y el EnumWindows y lo deje en la .DLL y efectivamente no funciono
Espero a ver sido claro
Saludos[ATTACH=CONFIG]1009[/ATTACH]

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  ee.png
Vistas: 22
Tamaño:  81,5 KB  

Última edición por fastpho fecha: 11 de noviembre de 2024 a las 21:39. Razón: err
fastpho is offline   Responder Con Cita
  #22
Antiguo 11 de noviembre de 2024, 23:25
fastpho
El Foro es mi casa
Innovación: Por aportar innovaciones - Issue reason: SQLite + OO Cobol class Concurso: Primer puesto: Ganador/a del Primer puesto en un concurso - Issue reason: Acceso a datos Cobol vía web 
Última Actividad 21.08.2026 18:08
Posts Posts: 365
Likes enviados Enviados: 252
Likes recibidos Recibidos: 243

@Kuk, efectivamente para usar una .DLL , y colocar el EnumWindowsProc en ella , se debe llamar pasandole un valor por contenido
Código COBOL:
  1.      MOVE "SFAC03.DLL" & x"00" TO  String-DLL.
  2.          
  3. *    call "GetModuleHandleA" with stdcall using by value 0 returning hModule
  4.       call "GetModuleHandleA" with stdcall using by CONTENT String-DLL  returning hModule
  5.      DISPLAY "hModule: " , hModule.  
Funciona correctamente
Gracias
Saludos ...
fastpho is offline   Responder Con Cita
  #23
Antiguo 12 de noviembre de 2024, 12:31
Joseg
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras en varias ocasiones 
Última Actividad 17.09.2026 18:23
Posts Posts: 401
Likes enviados Enviados: 130
Likes recibidos Recibidos: 179

Citación del post de Kuk Ver Mensaje
@Joseg, mea culpa, es que hay un detalle importante! Efectivamente, no puede funcionar TAL CUAL en una DLL porque GetModuleHandleA, si no le damos nombre del módulo sino que le pasamos un NULO, devuelve el hModule del EXE que se cargó inicialmente (el Main, vamos). Así que luego GetProcAddress, aunque lo llamamos en una DLL, le pasamos el hModule que obtuvimos del EXE, y evidentemente no encuentra "EnumWindowsProc", (a no ser que también esté presente en el EXE).

Por lo tanto, si lo queremos hacer SOLO en una DLL, lo que hay que hacer es pasarle a GetModuleHandleA el nombre de la DLL en parámetro en vez de un NULO. Es decir, reemplazar:
Código COBOL:
  1. call "GetModuleHandleA" with stdcall using by value h"00" returning hModule

por
Código COBOL:
  1. call "GetModuleHandleA" with stdcall using by content "RgestAPI.dll" returning hModule

O si no, dejar el fichero "EnumWindowsProc" en el EXE y no meterlo en la DLL. De hecho es por eso que a @fastpho le ha funcionado, seguro que ha dejado el fichero "EnumWindowsProc" en el EXE pero hizo la llamada a GetProcAddress en la DLL pasándole el hModule del EXE que obtuvo llamando a GetModuleHandleA con el parámetro a NULO (h"00").

No sé si me he explicado bien.
Ahora si!!! Dominas completamente este tema!!!
También estudiaré un poco sobre el tema. El uso de la API de Windows puede ayudar en muchos escenarios.

Gracias
Joseg is offline   Responder Con Cita
  #24
Antiguo 12 de noviembre de 2024, 14:54
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Joseg, no es que me lo sepa todo de memoria, ni falta que hace. Como decía, el problema era que el compilador de Fujitsu no funciona BY VLUE. Pero engañándolo como lo hacemos, sí que funciona. Y en tal caso podemos hacer cualquier cosa, todo lo que se hace en C se puede hacer en PowerCOBOL. El resto es ver la documentación



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