Página 1 de 1

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 02 Jul 2012 16:30
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,

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 02 Jul 2012 20:25
por viniciuspc
salve anfm, :xau

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

[]´s

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 02 Jul 2012 22:44
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

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 11:37
por HASA
:%

Bom dia alaminojunior, será que esse seu colega está comercializando a dll ?
:))
Hasa

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 11:46
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 ...

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 12:54
por Imatech

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 13:14
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.

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 13:21
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")

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 13:49
por anfm
Não foi tbm, sempre recebo como retorno "∟T)"

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 14:21
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.

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 03 Jul 2012 15:54
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

Como usar uma DLL criada em Delphi no xHarbour

Enviado: 05 Jul 2012 19:43
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)