Utilizar funciones de una dll con harbour

Post Reply
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Utilizar funciones de una dll con harbour

Post by Xevi »

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: Select all

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!!!
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Utilizar funciones de una dll con harbour

Post by cmsoft »

Esto es con la funcion CALLDLL32 de Fivewin, no se si te servira.

Code: Select all

nHandler := CallDll32( "Funcion" , "ARCHIVO.DLL" , nParam1 , nParam2 )
IF nHandler >= 0
     CallDll32( "OtraFuncion" , "ARCHIVO.DLL" , nHandler )
     CallDll32 ( "Respuesta" , "ARCHIVO.DLL" , nHandler, @RTA )
ENDIF
 
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Utilizar funciones de una dll con harbour

Post by cnavarro »

Mira este ejemplo

Code: Select all

#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"

 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Utilizar funciones de una dll con harbour

Post by Xevi »

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!!!
User avatar
Joaquim Ferrer
Posts: 58
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Utilizar funciones de una dll con harbour

Post by Joaquim Ferrer »

Buenas Xevi

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

Si es lo último :

Code: Select all

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, HTML5 evangelista
User avatar
Xevi
Posts: 168
Joined: Wed Nov 29, 2017 11:42 am
Location: Girona

Re: Utilizar funciones de una dll con harbour

Post by Xevi »

Gracias, Quim.

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

Aprendiz de la vida!!!
User avatar
Joaquim Ferrer
Posts: 58
Joined: Sat Jan 14, 2012 3:46 pm
Location: Barcelona

Re: Utilizar funciones de una dll con harbour

Post by Joaquim Ferrer »

Xevi

Puedes probar con automatización OLE y la función harbour

Code: Select all

win_oleCreateObject()
Tienes un ejemplo en https://github.com/vszakats/harbour-cor ... ts/ole.prg

También puedes llamar a una DLL de esta forma, mediante un script, linea de comando, etc

Code: Select all

Rundll32 Shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
Algunos ejemplos en https://www.thewindowsclub.com/rundll32 ... ds-windows
Saludos
Fivewinner desde 1.9, programador PHP y Javascript, HTML5 evangelista
Post Reply