In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

dll... cómo la utilizo en Xailer o Harbour ???

Foro de Xailer profesional en español
User avatar
XeviCOMAS
Posts: 465
Joined: Sat Mar 12, 2011 8:16 pm

dll... cómo la utilizo en Xailer o Harbour ???

Postby XeviCOMAS » Thu Dec 06, 2018 9:59 am

Bien, dada un dichero .dll básico, con un par de funciones, pues no se como utilizarla y sacarle el rendimiento en mi aplicación Xailer.

Si bien he buscado, leido, igual no he llegado hasta donde...

hDLL := LoadLibrary( "midll.dll" )
MsgInfo( hDLL ) //hasta ahí llego y me da el handle
FreeLibrary( hDLL ) //libero el handle


ahora bien, entre LoadLibrary() y FreeLibrary()
¿como abro una función contenida en esa dll ???

Buscando y leyendo un poco, he visto que añadiendo la lib hbxpp contiene la función CallDLL(), pero no me está funcionando.

Alguna función xaCallDLL( hDLL, "funciondll" ), no se, pregunto.

Alguna ayudita???
Un Saludo,
Xevi.
User avatar
ignacio
Site Admin
Posts: 8450
Joined: Mon Apr 06, 2015 8:00 pm
Location: Madrid, Spain
Contact:

Re: dll... cómo la utilizo en Xailer o Harbour ???

Postby ignacio » Thu Dec 06, 2018 8:43 pm

Buenos días,

En principio, en cuanto la DLL está cargada todas sus funciones están en ámbito. Es decir, no hay que hacer nada. Ahora bien, tienes que decirle a tu aplicación que va a llamar a una función que sólo va estar accesible cuando se cargue la DLL. Para ello has de utilizar la instrucción DYNAMIC cuyo uso se parece mucho en uso a la instrucción REQUEST.

Un saludo
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
XeviCOMAS
Posts: 465
Joined: Sat Mar 12, 2011 8:16 pm

Re: dll... cómo la utilizo en Xailer o Harbour ???

Postby XeviCOMAS » Thu Dec 06, 2018 9:04 pm

Ignacio,

gracias por tu pronta respuesta.
Entendido!!!

Con el Sample DllTest funciona correctamente.

Ahora bien, si la dll es externa, de un tercero, escrita en Harbour... deberia de funcionar igual, no???

Es que tengo problemas, igual por distinta versión de Harbour ???
Un Saludo,
Xevi.
User avatar
jfgimenez
Site Admin
Posts: 5573
Joined: Mon Apr 06, 2015 8:48 pm
Contact:

Re: dll... cómo la utilizo en Xailer o Harbour ???

Postby jfgimenez » Sun Dec 09, 2018 12:57 pm

Xevi,

si la DLL no está escrita en Harbour, entonces no te va a funcionar. Y si está escrita en Harbour, entonces te aconsejo que quien la haya creado la compile con Xailer.

En Harbour hay distintas formas de crear una DLL (con la HVM incluida, usando la HVM del .exe, usando la HVM de una harbour.dll, ...) y cada una se utiliza de distinta forma. Por otro lado, para usar una DLL de Harbour desde un programa Harbour, debería coincidir la versión de Harbour o al menos que tenga la misma versión de pcode. Puede incluso que haya otros requisitos.

Por si te interesa saberlo, Xailer crea DLLs muy ligeras, y utiliza la HVM que esté incluida en el .exe
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
User avatar
XeviCOMAS
Posts: 465
Joined: Sat Mar 12, 2011 8:16 pm

Re: dll... cómo la utilizo en Xailer o Harbour ???

Postby XeviCOMAS » Mon Dec 10, 2018 10:30 am

Pero...

Si, he visto que Xailer las crea ligeras... no, lo siguiente.
Està muy bien para compartir entre "nosotros", PERO...
Es incomprensible, ya no digo Xailer... que Harbour no pueda utilizar DLLs de terceros. Por ejemplo "User32.dll" u otra cualquiera que sea completa, con codigo autocontenido.

No se, en fin, sigo guscando la opción de poder utilizarlas...
Si alguien, que seguro que a alguien más le pasa por la cabeza de utilizar DLLs de terceros, puede o tiene código para compartir.

¿Algun foro directo de Harbour para abrir hilo ???


En alguna otra herramienta las utilizan de esta forma...
GetTextW( nHandle, @cTitle, 255 )
...
DLL FUNCTION GetTextW( nHandle AS LONG, @cT AS LPSTR, nMax AS LONG ) AS _INT PASCAL FROM "GetWindowTextA" LIB "user32.dll"

Pero, claro, desmenuzando/viendo el codigo que genera DLL FUNCTION, utiliza un par de funciones propias de su lenguaje que no tengo ni idea...
xxxCallDLL() y GetProcAdd()

function GetTextW( nHandle,cT,nMax )
local _hDLL := If( ValType( "user32.dll" ) == "N", "user32.dll", LoadLibrary( "user32.dll" ) )
local uResult
local cFarProc

if Abs( _hDLL ) > 32
cFarProc = GetProcAdd( _hDLL, If( Empty( "GetWindowTextA" ) == .T., "GetTextW", "GetWindowTextA" ), .T., 7,7,9,7 )
uResult = xxxCallDLL( cFarProc,nHandle,@cT,nMax )
If( ValType( "user32.dll" ) == "N",, FreeLibrary( _hDLL ) )
else
MsgAlert( "Error code: " + LTrim( Str( _hDLL ) ) + " loading " + If( ValType( "user32.dll" ) == "C", "user32.dll", Str( "user32.dll" ) ) )
end

return uResult


Gracias por vuestro tiempo.
Un Saludo,
Xevi.

Return to “Spanish”