Página 1 de 1

Dllload ou hb_LibLoad ?

Enviado: 11 Fev 2019 08:40
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?

Dllload ou hb_LibLoad ?

Enviado: 11 Fev 2019 12:11
por Mario Mesquita
Bom dia!

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

Saudações,
Mario.

Dllload ou hb_LibLoad ?

Enviado: 12 Fev 2019 00:37
por fladimir
usa o hb_dyncall() junto com hb_libload

Dllload ou hb_LibLoad ?

Enviado: 12 Fev 2019 14:53
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

Dllload ou hb_LibLoad ?

Enviado: 12 Fev 2019 16:56
por fladimir
isso

Dllload ou hb_LibLoad ?

Enviado: 12 Fev 2019 20:38
por JoséQuintas
Apenas pra "clarear".

hb_DynCall() é função interna do Harbour, não depende do sistema operacional.
Por isso é a mais indicada.

Dllload ou hb_LibLoad ?

Enviado: 14 Fev 2019 18:36
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

Dllload ou hb_LibLoad ?

Enviado: 14 Fev 2019 19:26
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

Dllload ou hb_LibLoad ?

Enviado: 14 Fev 2019 21:07
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

Dllload ou hb_LibLoad ?

Enviado: 12 Mar 2019 08:50
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.