Como usar uma DLL criada em Delphi no xHarbour

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

Moderador: Moderadores

Avatar do usuário
anfm
Colaborador
Colaborador
Mensagens: 65
Registrado em: 01 Mar 2010 22:16
Localização: Tatuí-SP
Contato:

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por anfm »

Boa tarde,

Estou criando uma DLL em Delphi e gostaria de usá-la em um programa desenvolvido em xHarbour.

Criei a seguinte rotina no Delphi em uma DLL.

function versao : pChar; Stdcall;
begin
Result := pchar('TESTE DE VERSAO');
end;

Alguém poderia postar um exemplo de como chamar esta rotina no xHarbour?

Também gostaria de um exemplo mostrando como enviar um comando para a DLL.

Ex:

function enviacomando(const Comando : pChar) : integer; Stdcall;

Desde já agradeço,
André Ferreira de Moraes
Conheça o Projeto ACBr - Automaçao Comercial Brasil
http://acbr.sourceforge.net
--------------------------------------------------------------------------------------
Fórum Oficial do Projeto ACBr
http://www.djsystem.com.br/acbr/forum
Avatar do usuário
viniciuspc
Usuário Nível 1
Usuário Nível 1
Mensagens: 40
Registrado em: 19 Dez 2006 17:18
Localização: Rio de Janeiro

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por viniciuspc »

salve anfm, :xau

tambem tive problemas a algumas semanas atras, dê uma olhada em : viewtopic.php?f=4&t=9424

[]´s
Clipper 5.2e + Blinker 5.10
Harbour 3.0.0 (Rev. 16951) + Microsoft Visual C++ 16.0.40219 (32-bit)
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por alaminojunior »

Boa noite.

Não manjo de Delphi e por isso não posso dar maiores esclarecimentos, mas um colega desenvolveu uma DLL em Delphi para captura do XML da NFe e utilizo da seguinte forma:

Código: Selecionar todos

Function main
Local handle:= loadlibrary('recxml.dll')
if handle < 1
   msginfo('DLL nÆo carregada')
   return
endif
dllcall(handle,32,"RecXML")
freelibrary(handle)
return
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por HASA »

:%

Bom dia alaminojunior, será que esse seu colega está comercializando a dll ?
:))
Hasa
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por alaminojunior »

HASA, envia um email para mim que eu rebato para ele e então vocês tratam do assunto.
Um detalhe é que ele me disse meses atrás que tal recurso não estava mais sendo disponibilizado pelas SEFAZ´s, pois é de lá que ele extrai as informações.
Mas dias atrás eu precisei usar e o arquivo xml foi gerado.

Quem sabe ...
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por Imatech »

M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
anfm
Colaborador
Colaborador
Mensagens: 65
Registrado em: 01 Mar 2010 22:16
Localização: Tatuí-SP
Contato:

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por anfm »

Meu problema está em obter um retorno "legível" pro xHarbour.

Tenho a seguinte função no delphi:

Código: Selecionar todos

function versao(var Resposta : pansichar ) : integer; Stdcall; export;
begin
  Resposta := pansichar('TESTE');
  Result   := 123;
end;
E tentei chamar no xHarbour da seguinte forma:

Código: Selecionar todos

#define DC_MICROSOFT           0x0000      // Default
#define DC_BORLAND             0x0001      // Borland compat
#define DC_CALL_CDECL          0x0010      // __cdecl
#define DC_CALL_STD            0x0020      // __stdcall
#define DC_RETVAL_MATH4        0x0100      // Return value in ST
#define DC_RETVAL_MATH8        0x0200      // Return value in ST

STATIC pComando[9]

FUNCTION Main
LOCAL nRet, pParametro
LOCAL hDLL
LOCAL cData

nRet := space(20)
pParametro := space(20)
pComando[1] := DllPrepareCall( "ioserial.dll", DC_CALL_STD, "versao" )
nRet        := DllExecuteCall( pComando[1], @pParametro )

? "versao"
? nRet
? pParametro

hDLL := DllLoad( "ioserial.dll" )
cData := Space( 24 )
DllCall( hDll, NIL, "versao", @cData )
? ">" + cData + "<"
DllUnload( hDLL )

inkey(0)
Return( Nil )
Mas das duas formas tenho um resultado com caracteres estranhos no xHarbour, se fizer o consumo dessa mesma função num aplicativo em Delphi a resposta é exibida corretamente.
André Ferreira de Moraes
Conheça o Projeto ACBr - Automaçao Comercial Brasil
http://acbr.sourceforge.net
--------------------------------------------------------------------------------------
Fórum Oficial do Projeto ACBr
http://www.djsystem.com.br/acbr/forum
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por alaminojunior »

André, tente trocar o 2ª parâmetro da chamada a dll de NIL para 32.
Lembrando ...

Código: Selecionar todos

dllcall(handle,32,"RecXML")
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
anfm
Colaborador
Colaborador
Mensagens: 65
Registrado em: 01 Mar 2010 22:16
Localização: Tatuí-SP
Contato:

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por anfm »

Não foi tbm, sempre recebo como retorno "∟T)"
André Ferreira de Moraes
Conheça o Projeto ACBr - Automaçao Comercial Brasil
http://acbr.sourceforge.net
--------------------------------------------------------------------------------------
Fórum Oficial do Projeto ACBr
http://www.djsystem.com.br/acbr/forum
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por alxsts »

Olá!

Talvez tenha que converter o retorno com a função HB_AnsiToOem( <cANSI_String> ) --> cOEM_String. Ou ajustar a code page com as funções apropriadas (HB_LangSelect(), HB_SetCodePage()), antes de chamar a DLL.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por HASA »

:D
Olá IMATECH

O executavel é bom sim eu conheço mas... é externo ao meu sistema a ideia da dll é legal pois posso chamar de dentro do sistema, assim como espero que o André esteja criando com esses testes alguma DLL ( AcbrNfe.dll ) seria muito bom,

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

Como usar uma DLL criada em Delphi no xHarbour

Mensagem por janio »

Para Gerar chaves Publica e Privada pela Dll da Bematech, faço da seguinte forma e FUNCIONA:

Código: Selecionar todos

Function GeraChavePrivadaPublica
Local kDll, oRet, H_Handle
Local chPublica := Space(256)
Local chPrivada := Space(256)

kDll := LoadLibrary("sign_bema.dll")
oRet := DllCall(kDll,32,"genkkey", chPublica,chPrivada)  
FreeLibrary(kDll)

If oRet = 0
	Msg("Erro " + Str(oRet) + " ao tentar gerar chaves")
	Return .f.
Endif

// exibe retorno
? chPublica
? chPrivada

Return .t.
PS: Se puder enviar a dll pra ver se por aki tenho o mesmo retorno q vc... (janioaguiar@ig.com.br)
Editado pela última vez por Pablo César em 05 Jul 2012 20:09, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Responder