Dllload ou hb_LibLoad ?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dllload ou hb_LibLoad ?

Mensagem por janio »

Bom dia,

Preciso trabalhar com uma dll e fazendo pesquisas encontrei essas duas funções para carregamento dll - Dllload()/DllUnload() e hb_LibLoad()/hb_LibFree().

A pergunta que me veio na hora foi: Qual usar? Qual a diferença entre as duas?
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Mario Mesquita
Usuário Nível 4
Usuário Nível 4
Mensagens: 613
Registrado em: 08 Dez 2009 13:47
Localização: Rio de Janeiro

Dllload ou hb_LibLoad ?

Mensagem por Mario Mesquita »

Bom dia!

Janio, segundo dica de um colega daqui, Wapi_LoadLibrary(). Fuçando também achei Hb_LibLoad().

Saudações,
Mario.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Dllload ou hb_LibLoad ?

Mensagem por fladimir »

usa o hb_dyncall() junto com hb_libload
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dllload ou hb_LibLoad ?

Mensagem por janio »

usa o hb_dyncall() junto com hb_libload
Eita ja apareceu outra? kkk

Recapitulando:
hb_LibLoad() - Carrega a Dll
hb_dyncall() - chama os metodos da Dll
hb_LibFree() - Libera a Dll

Esse seria o mais recomendado ne
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Dllload ou hb_LibLoad ?

Mensagem por fladimir »

isso
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dllload ou hb_LibLoad ?

Mensagem por JoséQuintas »

Apenas pra "clarear".

hb_DynCall() é função interna do Harbour, não depende do sistema operacional.
Por isso é a mais indicada.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dllload ou hb_LibLoad ?

Mensagem por janio »

hb_DynCall() é função interna do Harbour, não depende do sistema operacional.
Com hb_DynCall() o sistema eh abortado sem qualquer aviso.

cRet := hb_DynCall( nDllMfe, 32, "ConsultarStatusOperacionalMFE", nRandom, CodAtivacao )

Colocando DllCall() no lugar volta a funcionar sem erros

Windows 10 64 bits
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Dllload ou hb_LibLoad ?

Mensagem por JoséQuintas »

Vê se melhora... usei com a DLL do RMChart.

Código: Selecionar todos

#include "hbdyn.ch"
...
   METHOD Init()                           INLINE ::nHandle := hb_libLoad( "RMChart.dll" )
   METHOD Destroy()                        INLINE hb_libFree( ::nHandle )
   METHOD AddBarSeries(a,b,c, ... )        INLINE ::CallDllStd( "RMC_ADDBARSERIES", a, b, ::ToDouble( c ), ... )
   METHOD CallDllStd( cName, ... )         INLINE hb_DynCall( { cName, ::nHandle, HB_DYN_CALLCONV_STDCALL }, ... )
   METHOD ToDecimal( xValue )              INLINE xValue + 1.01 - 1.01
   METHOD ToDouble( xValue )
hb_LibLoad() pra carregar a DLL, retorna um ponteiro
hb_LibFree() no final pra liberar a DLL
hb_DynCall() pra chamar rotinas, indicando a conversão padrão

Na conversão "automática" do Harbour, precisa um empurrãozinho pra double e decimal

Por coincidência, exatamente o comentei no problema que estava resolvendo do Flagship.... kkkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

Dllload ou hb_LibLoad ?

Mensagem por janio »

Blz, agora deu certo. Eh que essa função tem parametros diferentes da DllCall(). Com hb_DynCall() o primeiro parametro eh uma array.

Vlw
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Eduardo Pinho
Colaborador
Colaborador
Mensagens: 72
Registrado em: 13 Jun 2014 19:30
Localização: Niteroi

Dllload ou hb_LibLoad ?

Mensagem por Eduardo Pinho »

Amigos,

Estou com uma duvida, e em vez de abrir outro topico acho que esse topico se encaixa no meu problema.
Uso Harbour 3.0 e quero usar uma DLL que um amigo gerou pra mim pelo Visual Fox.

Só que nao funciona de jeito nenhum...

Essa funciona bem:
Ret:= hb_DynCall( { "MessageBoxA", "user32.dll", HB_DYN_CALLCONV_STDCALL }, 0, "Isto é uma MessageBOX !", "Teste DLL", 0 )

Mas a que ele gerou no Fox nao funciona. Ja tentei carregando primeiro com hb_libload mas nao adiantou.

Ele fez uma pesquisa e disse que descobriu o problema. Disse que o Fox gera DLL orientada a objeto e que o Harbour nao consegue ler dessa forma.

Sabem, por acaso, se isso procede? Se é realmente isso, e se tem alguma forma de fazer ela funcionar?

Agradeço a ajuda. Abcs.
Responder