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
Responder
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

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

Mensaje por XeviCOMAS »

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.
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9246
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

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

Mensaje por ignacio »

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]
https://www.xailer.com
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

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

Mensaje por XeviCOMAS »

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.
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5706
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

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

Mensaje por jfgimenez »

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
Avatar de Usuario
XeviCOMAS
Mensajes: 582
Registrado: Sab Mar 12, 2011 8:16 pm

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

Mensaje por XeviCOMAS »

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.
Responder