FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Utilizar funciones de una dll con harbour
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM

Utilizar funciones de una dll con harbour

Posted: Thu Dec 06, 2018 12:02 PM
Si bien he probado y visto como se saca partido a unas funciones de una dll con FW, del sample babu.prg y babudll.prg

Pretendo utilizar lo mismo, funciones de un fichero dll, el mismo babudll.dll, PERO sin utilizar FW, con Harbour nativo.
He agregado la lib hbxpp para compilar, pero no consigo hacerlo andar.

Tambi茅n, segun he visto algun ejemplo por la red, pero no lo consigo!!!

Code (fw): Select all Collapse
function Main()
聽 聽Local hDLL

聽 聽hDLL = LoadLibrary( "user32.dll" )
聽 聽msginfo( hDLL ) 聽//me da correctamente el handle

//hbxpp.lib
//DllCall(<cDllFile>|<nDllHandle>,[<nCallingConvention>],<cFuncName>|<nOrdinal>,[<xParams,...>])->nResult
聽 聽DllCall( "user32.dll", 32, "GetWindowText" )
聽 聽DllCall( hDLL, 32, "GetWindowText" )
//no consigo nada, ni con el nombre ni con el handle

聽 聽MsgInfo( "aqu铆 llego" )
聽 聽
聽 聽FreeLibrary( hDLL )

return nil


驴Alguien puede orientarme un poco???
驴Que hago mal???
驴Que me falta???
驴Se pueden atacar DLLs con harbour nativo???

Gracias.
Un Saludo,

Xevi.



Aprendiz de la vida!!!
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM

Re: Utilizar funciones de una dll con harbour

Posted: Thu Dec 06, 2018 10:14 PM
Esto es con la funcion CALLDLL32 de Fivewin, no se si te servira.
Code (fw): Select all Collapse
nHandler := CallDll32( "Funcion" , "ARCHIVO.DLL" , nParam1 , nParam2 )
IF nHandler >= 0
     CallDll32( "OtraFuncion" , "ARCHIVO.DLL" , nHandler )
     CallDll32 ( "Respuesta" , "ARCHIVO.DLL" , nHandler, @RTA )
ENDIF
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM

Re: Utilizar funciones de una dll con harbour

Posted: Thu Dec 06, 2018 11:05 PM
Mira este ejemplo

Code (fw): Select all Collapse
#include "Fivewin.ch"

Static cTitle  := ""

Function Main()

   local oDlg
   cTitle     := Space( 40 )

   DEFINE WINDOW oDlg TITLE "Prueba" FROM 10, 10 TO 200, 300 PIXEL

   ACTIVATE WINDOW oDlg ON INIT ( GetTextW( oDlg:hWnd, @cTitle, 255 ), MsgInfo( cTitle ) )

Return nil

DLL FUNCTION GetTextW( nHandle AS LONG, @cT AS LPSTR, nMax AS LONG ) AS _INT PASCAL FROM "GetWindowTextA" LIB "user32.dll"
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM

Re: Utilizar funciones de una dll con harbour

Posted: Mon Dec 10, 2018 08:41 AM

Las dos opciones requieren de FW, por lo tanto no me sirve para utilizar con Harbour nativo.

Cristobal, el c贸digo ppo de la opcion que me sugieres, hecha mano de FWCallDLL y GetProcAdd de FW

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 = FWCallDLL( 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

Y la otra opci贸n, CallDll32, ya directamente es una funci贸n de FW.

Alguna sugerencia... o cual foro Harbour donde poner mi petici贸n???

Gracias.

Un Saludo,

Xevi.



Aprendiz de la vida!!!
Posts: 105
Joined: Sat Jan 14, 2012 03:46 PM

Re: Utilizar funciones de una dll con harbour

Posted: Mon Dec 10, 2018 02:49 PM
Buenas Xevi

Pretendes utilizar funciones contenidas en una DLL o pcode harbour de una DLL ?

Si es lo 煤ltimo :

Code (fw): Select all Collapse
DYNAMIC HRBFUNC1
FUNCTION Main()
Local x, handle := hb_LibLoad( "my.dll" )
聽
x := hrbFunc1() 聽 // hrbFunc1 - the function from my.dll
聽
hb_LibUnload( handle )
Return Nil


Tienes +info en http://www.kresin.ru/en/hrbfaq_3.html#Doc12
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista
Posts: 174
Joined: Wed Nov 29, 2017 11:42 AM

Re: Utilizar funciones de una dll con harbour

Posted: Mon Dec 10, 2018 04:33 PM

Gracias, Quim.

Funciones contenidas en una Dll...
Llamar a funciones en pcode, eso ya lo havia visto.

Un Saludo,

Xevi.



Aprendiz de la vida!!!
Posts: 105
Joined: Sat Jan 14, 2012 03:46 PM

Re: Utilizar funciones de una dll con harbour

Posted: Tue Dec 11, 2018 07:42 AM
Xevi

Puedes probar con automatizaci贸n OLE y la funci贸n harbour
Code (fw): Select all Collapse
win_oleCreateObject()

Tienes un ejemplo en https://github.com/vszakats/harbour-core/blob/master/contrib/hbwin/tests/ole.prg

Tambi茅n puedes llamar a una DLL de esta forma, mediante un script, linea de comando, etc
Code (fw): Select all Collapse
Rundll32 Shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder


Algunos ejemplos en https://www.thewindowsclub.com/rundll32-shortcut-commands-windows
Saludos
Fivewinner desde 1.9, programador PHP y Javascript, PWA & HTML5 evangelista

Continue the discussion