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.

Exemplo como ler Function em DLL (Xailer 2)

Foro de Xailer profesional en español
Responder
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

No Xailer 2 podemos criar uma DLL somente de Function.
Ex:
DLL MyFunc:
Function MyFunc1(par1)
...
Return Nil
Function MyFunc2(par1,par2)
....
Return Nil
etc....
Para ler as funçíµes a partir do projeto principal ou de outra DLL é
necessário declarar em REQUEST e usar HB_LibLoad para cada função.
Fiz a FUNCTION abaixo que não precisa do REQUEST:
FUNCTION
Func_DLL(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15, f16,f17,f18,f19,f20)
LOCAL nHandle,xReturn
nHandle := HB_LibLoad( "MyFunc.DLL" )
xReturn:=EVAL({||&(f1)(f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f 12,f13,f14,f15,f16,f17,f18,f19,f20)})
HB_LibFree( nHandle )
RETURN(xReturn)
Esta função deverá ficar no projeto principal do EXE.
Para ler uma função na DLL faça assim:
Func_DLL("MyFunc1",DATE())
ou
xvalor:=Func_DLL("Myfunc2",Self,5,......)
etc...
onde o primeiro parí¢metro é o nome da Function na DLL e
os demais parí¢mentos poderão ou não ser passados, se existir.
Espero ter contribuido.
Mário
www.eMeAsOfT.com.br
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Correto:
FUNCTION
Func_DLL(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15, f16,f17,f18,f19,f20)
LOCAL nHandle,xReturn
nHandle := HB_LibLoad( "MyFunc.DLL" )
xReturn:=EVAL({||&(f1)(f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f 12,f13,f14,f15,f16,f17,f18,f19,f20)})
HB_LibFree( nHandle )
RETURN(xReturn)
"Mário Angelini" <mario@emeasoft.com.br> escreveu na mensagem
news:[email=49f46755@svctag-j7w3v3j....]49f46755@svctag-j7w3v3j....[/email]
> No Xailer 2 podemos criar uma DLL somente de Function.
> Ex:
> DLL MyFunc:
>
> Function MyFunc1(par1)
> ..
> Return Nil
>
> Function MyFunc2(par1,par2)
> ...
> Return Nil
> etc....
>
> Para ler as funçíµes a partir do projeto principal ou de outra DLL é
> necessário declarar em REQUEST e usar HB_LibLoad para cada função.
>
> Fiz a FUNCTION abaixo que não precisa do REQUEST:
>
> FUNCTION
> Func_DLL(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15, f16,f17,f18,f19,f20)
> LOCAL nHandle,xReturn
> nHandle := HB_LibLoad( "MyFunc.DLL" )
> xReturn:=EVAL({||&(f1)(f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f 12,f13,f14,f15,f16,f17,f18,f19,f20)})
> HB_LibFree( nHandle )
> RETURN(xReturn)
>
> Esta função deverá ficar no projeto principal do EXE.
>
> Para ler uma função na DLL faça assim:
>
> Func_DLL("MyFunc1",DATE())
> ou
> xvalor:=Func_DLL("Myfunc2",Self,5,......)
> etc...
> onde o primeiro parí¢metro é o nome da Function na DLL e
> os demais parí¢mentos poderão ou não ser passados, se existir.
>
>
>
>
> Espero ter contribuido.
> Mário
> www.eMeAsOfT.com.br
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por jrcpoli-quitar »

Saludos:
Interesante tu aportación para leer funciones directamente dentro de una
Dll, pero veo que algunas las van a usar para algo que ya existe por eso
te aconsejo que leas este artí­culo.
http://xailer.info/esp/?p=160
José Ramón Castro.
Mário Angelini escribió:
> No Xailer 2 podemos criar uma DLL somente de Function.
> Ex:
> DLL MyFunc:
>
> Function MyFunc1(par1)
> ..
> Return Nil
>
> Function MyFunc2(par1,par2)
> ...
> Return Nil
> etc....
>
> Para ler as funçíµes a partir do projeto principal ou de outra DLL é
> necessário declarar em REQUEST e usar HB_LibLoad para cada função.
>
> Fiz a FUNCTION abaixo que não precisa do REQUEST:
>
> FUNCTION
> Func_DLL(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15, f16,f17,f18,f19,f20)
>
> LOCAL nHandle,xReturn
> nHandle := HB_LibLoad( "MyFunc.DLL" )
> xReturn:=EVAL({||&(f1)(f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f 12,f13,f14,f15,f16,f17,f18,f19,f20)})
>
> HB_LibFree( nHandle )
> RETURN(xReturn)
>
> Esta função deverá ficar no projeto principal do EXE.
>
> Para ler uma função na DLL faça assim:
>
> Func_DLL("MyFunc1",DATE())
> ou
> xvalor:=Func_DLL("Myfunc2",Self,5,......)
> etc...
> onde o primeiro parí¢metro é o nome da Function na DLL e
> os demais parí¢mentos poderão ou não ser passados, se existir.
>
>
>
>
> Espero ter contribuido.
> Mário
> www.eMeAsOfT.com.br
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Ramón,
O link abaixo vai para:
Nueva versión de Messages.Prg para Xailer
Aqui os dejo una nueva versión de Messages.Prg con su manual comp....
í‰ isto mesmo?
Pois não entendi sua colocação.
Mário
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escreveu
na mensagem news:[email=49fae47f@svctag-j7w3v3j....]49fae47f@svctag-j7w3v3j....[/email]
> Saludos:
>
> Interesante tu aportación para leer funciones directamente dentro de una
> Dll, pero veo que algunas las van a usar para algo que ya existe por eso
> te aconsejo que leas este artí­culo.
>
> http://xailer.info/esp/?p=160
>
> José Ramón Castro.
> Mário Angelini escribió:
>> No Xailer 2 podemos criar uma DLL somente de Function.
>> Ex:
>> DLL MyFunc:
>>
>> Function MyFunc1(par1)
>> ..
>> Return Nil
>>
>> Function MyFunc2(par1,par2)
>> ...
>> Return Nil
>> etc....
>>
>> Para ler as funçíµes a partir do projeto principal ou de outra DLL é
>> necessário declarar em REQUEST e usar HB_LibLoad para cada função.
>>
>> Fiz a FUNCTION abaixo que não precisa do REQUEST:
>>
>> FUNCTION
>> Func_DLL(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15, f16,f17,f18,f19,f20)
>> LOCAL nHandle,xReturn
>> nHandle := HB_LibLoad( "MyFunc.DLL" )
>> xReturn:=EVAL({||&(f1)(f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f 12,f13,f14,f15,f16,f17,f18,f19,f20)})
>> HB_LibFree( nHandle )
>> RETURN(xReturn)
>>
>> Esta função deverá ficar no projeto principal do EXE.
>>
>> Para ler uma função na DLL faça assim:
>>
>> Func_DLL("MyFunc1",DATE())
>> ou
>> xvalor:=Func_DLL("Myfunc2",Self,5,......)
>> etc...
>> onde o primeiro parí¢metro é o nome da Function na DLL e
>> os demais parí¢mentos poderão ou não ser passados, se existir.
>>
>>
>>
>>
>> Espero ter contribuido.
>> Mário
>> www.eMeAsOfT.com.br
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

> Interesante tu aportación para leer funciones directamente dentro de una
>Dll, pero veo que algunas las van a usar para algo que ya existe por eso
>te aconsejo que leas este artí­culo.
> http://xailer.info/esp/?p=160
Ramón, poderia por favor me explicar melhor o que vocíª quis dizer
com a citação do link pois não consegui entender.
Grato
Mário
jrcpoli-quitar
Mensajes: 558
Registrado: Mar Feb 09, 2010 2:26 pm

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por jrcpoli-quitar »

Mario:
Mário Angelini escribió:
>> Interesante tu aportación para leer funciones directamente dentro de una
> >Dll, pero veo que algunas las van a usar para algo que ya existe por eso
> >te aconsejo que leas este artí­culo.
>> http://xailer.info/esp/?p=160
>
> Ramón, poderia por favor me explicar melhor o que vocíª quis dizer
> com a citação do link pois não consegui entender.
> Grato
> Mário
Lo que quise decirte es que si dentro de las funciones que ibas a
utilizar habí­a funciones parecidas a las que tiene mensajes no hací­a
falta que las implementaras, que ya estaban hechas, con el fin de que
nos las duplicaras, no me referí­a a que miraras el ejemplo como una
implementación de la DLL.
No se si me entiendes.
José Ramón Castro.
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Ramón:
Ahora entiendo.
Pero fue sólo un ejemplo.
Se debe cambiar para que no coincida con el nombre de la función,
simplemente.
Saludos.
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> escreveu
na mensagem news:49fff20a$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Mario:
> Mário Angelini escribió:
>>> Interesante tu aportación para leer funciones directamente dentro de una
>> >Dll, pero veo que algunas las van a usar para algo que ya existe por
>> eso
>> >te aconsejo que leas este artí­culo.
>>> http://xailer.info/esp/?p=160
>>
>> Ramón, poderia por favor me explicar melhor o que vocíª quis dizer
>> com a citação do link pois não consegui entender.
>> Grato
>> Mário
>
> Lo que quise decirte es que si dentro de las funciones que ibas a utilizar
> habí­a funciones parecidas a las que tiene mensajes no hací­a falta que las
> implementaras, que ya estaban hechas, con el fin de que nos las
> duplicaras, no me referí­a a que miraras el ejemplo como una implementación
> de la DLL.
>
> No se si me entiendes.
>
> José Ramón Castro.
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Hola!!
Busca ayudar a xHarbour vio una función que dice FUNCTION
DLL directa.
Mário
HB_LibDo()
Executes a function located in a dynamically loaded xHarbour DLL.
Ejemplo:
FUNCTION
Func_DLL(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f1 4,f15,f16,f17,f18,f19,f20)
LOCAL nHandle,nRet
IF !FILE(""+CURDIR()+"MyFunc.DLL")
MsgStop("No se ha econtrado DLL: "+""+CURDIR()+"MyFunc.DLL",)
ELSE
nHandle := HB_LibLoad( "MyFunc.DLL" )
//
nRet:=EVAL({||&(nFunc)(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f1 1,f12,f13,f14,f15,f16,f17,f18,f19,f20)})
// or:
nRet:=HB_LibDo(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12, f13,f14,f15,f16,f17,f18,f19,f20) HB_LibFree( nHandle )ENDIFRETURN(nRet)
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Hola!!
Busca Ayuda a xHarbour vio una función que dice FUNCTION
DLL directa.
Mário
HB_LibDo()
Executes a function located in a dynamically loaded xHarbour DLL.
Ejemplo:
FUNCTION
Func_DLL(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f1 4,f15,f16,f17,f18,f19,f20)
LOCAL nHandle,nRet
IF !FILE(""+CURDIR()+"MyFunc.DLL")
MsgStop("No se ha econtrado DLL: "+""+CURDIR()+"MyFunc.DLL",)
ELSE
nHandle := HB_LibLoad( "MyFunc.DLL" )
//
nRet:=EVAL({||&(nFunc)(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f1 1,f12,f13,f14,f15,f16,f17,f18,f19,f20)})
// or:
nRet:=HB_LibDo(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12, f13,f14,f15,f16,f17,f18,f19,f20)HB_LibFree( nHandle )ENDIFRETURN(nRet)
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Pero la forma más rápida serí­a la siguiente:
&("SayHello")( "Called via Macro operator" )
Véase la "Note" a continuación.
EXAMPLE:
// The example consists of two file. The first is compiled to an EXE
// and the second to a DLL. Function SayHello() resides in the DLL
// and is called from the EXE.
/* ------------------------------------------------------------
// File: DYNDLL.PRG
// Compile and link as EXE for DLL usage
// e.g. XBuild -usedll dyndll.exe dyndll.prg
// ---------------------------------------------------------- */
PROCEDURE Main
LOCAL pDLL
? Type( "SayHello()" )
// result is "U" because the function SayHello()
// does not exist
? pDLL := LibLoad( "dyndll1.dll" )
// result is a pointer to the loaded DLL
? Type( "SayHello()" )
// result is "UI" because function SayHello()
// exists now (in loaded DLL)
? HB_LibDo( "SayHello" )
// result is: 1
// displays : Hello from DLL
? HB_LibDo( "SayHello", "Called via HB_LibDo()" )
// result is: 2
// displays : Called via HB_LibDo()
? &("SayHello")( "Called via Macro operator" )
// result is: 3
// displays : Called via Macro operator
//
// NOTE:
// This is the fastest way of calling a DLL function:
//
// The macro operator "&" looks up the function symbol.
// The execution operator "()" calls the function and
// passes parameter(s) on to it
? LibFree( pDll )
// result is .T., DLL is successfully unloaded
? Type( "SayHello()" )
// result is "U" because the function SayHello()
// does not exist anymore
RETURN
/* ------------------------------------------------------------
// File: DYNDLL1.PRG
// Compile and link as DLL
// e.g. XBuild dyndll1.dll dyndll.prg
// ---------------------------------------------------------- */
FUNCTION SayHello( cText )
STATIC nCalls := 0
IF cText == NIL
cText := "Hello from DLL"
ENDIF
? cText
RETURN ++nCalls
************************************************************ *****************
FUNCTION
Func_DLL(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f1 4,f15,f16,f17,f18,f19,f20)
LOCAL nHandle,nRet
IF !FILE(""+CURDIR()+"MyFunc.DLL")
MsgStop("DLL não localizada em: "+""+CURDIR()+"MyFunc.DLL","AVISAR O
SUPORTE Tí‰CNICO:")
ELSE
nHandle := HB_LibLoad( "MyFunc.DLL" )
*
nRet:=EVAL({||&(nFunc)(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f1 1,f12,f13,f14,f15,f16,f17,f18,f19,f20)})
nRet:=&(nFunc)(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f1 3,f14,f15,f16,f17,f18,f19,f20)*nRet:=HB_LibDo(nfunc,f1,f2,f3 ,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f 20) HB_LibFree( nHandle )ENDIFRETURN(nRet)****************************************** ****
Avatar de Usuario
emeasoft
Mensajes: 1088
Registrado: Mié Abr 01, 2009 4:12 pm
Ubicación: emeasoft
Contactar:

Exemplo como ler Function em DLL (Xailer 2)

Mensaje por emeasoft »

Lo sentimos, el editor de texto por defecto:
FUNCTION
Func_DLL(nfunc,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f1 4,f15,f16,f17,f18,f19,f20)
LOCAL nHandle,nRet
IF !FILE(""+CURDIR()+"MyFunc.DLL")
MsgStop("DLL não localizada em: "+""+CURDIR()+"MyFunc.DLL")
ELSE
nHandle := HB_LibLoad( "MyFunc.DLL" )
"
nRet:=&(nFunc)(f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f1 3,f14,f15,f16,f17,f18,f19,f20)
"
*sin las comillas "
HB_LibFree( nHandle )
ENDIF
RETURN(nRet)
Responder