Error Usando LoadLib32 o LoadLib - Retorno Puntero

Error Usando LoadLib32 o LoadLib - Retorno Puntero

Postby GUSPRE » Mon Apr 01, 2024 3:38 pm

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  RUN

init procedure LoadGdi32

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

return
 


Retorna: 2006188032
y funciona OK el PRG.

Les agadeceré cualquier aporte. Muchas Gracias,
Saludos,
GUSTAVO PREDIGER
User avatar
GUSPRE
 
Posts: 94
Joined: Thu May 11, 2006 10:00 pm
Location: BS.AS.ARGENTINA

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

Postby Antonio Linares » Tue Apr 02, 2024 4:59 am

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
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

Postby GUSPRE » Thu Apr 04, 2024 12:50 pm

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  RUN

*-------------------------------------------------------------------------------------------------------------------
* 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)
   
 
GUSTAVO PREDIGER
User avatar
GUSPRE
 
Posts: 94
Joined: Thu May 11, 2006 10:00 pm
Location: BS.AS.ARGENTINA

Re: Error Usando LoadLib32 o LoadLib - Retorno Puntero

Postby Antonio Linares » Thu Apr 04, 2024 1:09 pm

Muy bien! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42118
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot], pablovidal and 43 guests