Page 1 of 1

Error Usando LoadLib32 o LoadLib - Retorno Puntero

PostPosted: Mon Apr 01, 2024 3:38 pm
by GUSPRE
Buenas TArdes,

Realizando un update de los sistemas con
FWH 24_02 - Xhar 1.3.1 build 20240324 - Bcc770 (32)

He encontrado errores usando las DLL que funcionan en otra versión.
El problema es que al cargar las DLL el handler retorna un Puntero , esto provoca que al llamar a las funciones internas de las DLL estas arrojen error.

He probado con los samples que vienen en FWH (Que usan LoadLibrary or LoadLib32) y hacen lo mismo , por ejemplo EMF.PRG
Error

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 04/01/24, 11:43:31
Error description: Error BASE/1099 Argument error: STR
Args:
[ 1] = P 0x77940000 ->>> Justamente este es el pointer del handle de la DLL
[ 2] = U
[ 3] = U

Comparando con versiones anteriores el handle retornaba un Numero y ahora es pointer
Ejemplo EMF.PRG con FWH 14

Code: Select all  Expand view

init procedure LoadGdi32

   hGDI32 = LoadLib32( "gdi32.dll" )
   
    MSGINFO(hGDI32)

return
 


Retorna: 2006188032
y funciona OK el PRG.

Les agadeceré cualquier aporte. Muchas Gracias,
Saludos,

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

PostPosted: Tue Apr 02, 2024 4:59 am
by Antonio Linares
Estimado Gustavo,

Asegúrate de que estás usando el fichero DLL.ch de FWH más reciente ya que este fichero ahora realiza automaticamente la conversión de puntero a número largo

Busca por si tienes alguna versión más antigua de DLL.ch y bórrala

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

PostPosted: Thu Apr 04, 2024 12:50 pm
by GUSPRE
Hola Anotnio!

Muchas Gracias por la respuesta.

Lo he solucionado creando un función y conviertiendo el puntero. Ha funcioando OK
Lo dejo aquí.. Saludos!

Code: Select all  Expand view

*-------------------------------------------------------------------------------------------------------------------
* Conversor de Pointer a Numero para DLLs LoadLib desde Fivewin 24_02
*-------------------------------------------------------------------------------------------------------------------
FUNCTION LoadLib24 (cLib)

LOCAL nHand

DEFAULT cLib:=""

IF !FILE(cLib)
    MSGALERT("Libreria: "+cLib+" No Cargada","Atención")
    RETURN(0)
ENDIF

nHand  :=LoadLib32( cLib)
*nHand  := LoadLibrary( cLib )
IF ValType( nHand ) == "P"
    nHand = PtrToNum( nHand )
ENDIF
IF Abs( nHand ) <= 32
   MsgStop( "No es Posible Cargar "+cLib,"Atención" )
ENDIF

RETURN(nHand)
   
 

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

PostPosted: Thu Apr 04, 2024 1:09 pm
by Antonio Linares
Muy bien! :-)