Uso da DLL Daruma com XHarbour

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

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Uso da DLL Daruma com XHarbour

Mensagem por marcos.gurupi »

Caro, estou tentando usar a dll da daruma mas sem sucesso. Inclusive o retorno estah vindo em branco. Jah adicionei ao meu projeto o arq. c e o lib gerado apartir da daruma32.dll. Alguem poderia me auxiliar?

Isso tudo no XHARBOUR. Peguei o exemplo em XHARBOUR no site da daruma mas nao tive sucesso.


Marcos Roberto
Marcos Roberto
NetService Software
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Uso da DLL Daruma com XHarbour

Mensagem por alaminojunior »

O exemplo no site da Daruma usa FiveWin e realmente é meio esquisito mesmo.
Mas vamos aos fatos:
Para carregar a DLL eu uso assim:

Código: Selecionar todos

h1:= LoadLibrary("Daruma32.dll")
Para emitir uma Leitura X:

Código: Selecionar todos

ret:= dllcall(h1,32,"Daruma_FI_LeituraX")
os retornos eu faço da seguinte forma:

Código: Selecionar todos

if ret != 1 .and. !chk_ret()
   return .f.
else
   return .t.
endif
Para encerrar com a DLL:

Código: Selecionar todos

FreeLibrary(h1)
Lembrando que para esta função de retorno funcionar, a chave Status Função no registro do Windows, deve estar setado em 1

Código: Selecionar todos

Function Chk_Ret
local liga,ack,st1,st2,msg1,msg2,respep
ack:= i2bin(0)
st1:= i2bin(0)
st2:= i2bin(0)
liga:= dllcall(h1,32,"Daruma_FI_RetornoImpressora",ack,st1,st2)
msg1:= bin2i(St1)
msg2:= bin2i(St2)
********************************************************************************
if msg1 >= 128
	wvt_messagebox("Fim de Papel","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
	msg1 = msg1-128
endif
if msg1 >= 64
  	return .t.   // pouco papel
endif
if msg1 >= 32
  	wvt_messagebox("Erro no Relogio","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
  	msg1 = msg1-32
endif
if msg1 >= 16
  	wvt_messagebox("Impressora em Erro","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg1 = msg1-16
endif
if msg1 >= 8
   wvt_messagebox("Comando nao iniciado com ESC","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg1 = msg1-8
endif
if msg1 >= 4
  	wvt_messagebox("Comando nao existente","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
  	msg1 = msg1-4
endif
if msg1 >= 2
  	wvt_messagebox("Cupom Aberto","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
  	msg1 = msg1-2
endif
if msg1 >= 1
  	wvt_messagebox("Numero de Parametros Invalido","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
  	msg1 = msg1-1
endif
********************************************************************************
If msg2 >= 128 
	wvt_messagebox("Tipo de Parâmetro de Comando Inválido","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg2 = msg2 - 128	
Endif
If msg2 >= 64
	wvt_messagebox("Memória Fiscal Lotada","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg2 = msg2 - 64
Endif
If msg2 >= 32
	wvt_messagebox("Erro na Memória RAM","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg2 = msg2 - 32
Endif
If msg2 >= 16
	wvt_messagebox("Alíquota Não Programada","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg2 = msg2 - 16
Endif
If msg2 >= 8
	wvt_messagebox("Capacidade de Alíquotas Lotada","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48) 
   msg2 = msg2 - 8
Endif
If msg2 >= 4
	wvt_messagebox("Cancelamento Não Permitido","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48) 
   msg2 = msg2 - 4
Endif
If msg2 >= 2
	wvt_messagebox("CNPJ/IE do Proprietário Não Programado","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48) 
   msg2 = msg2 - 2
Endif
If msg2 >= 1
	//wvt_messagebox("Comando Não Executado","RESPOSTA DO ECF "+str(msg1,4),+"-"+str(msg2,4),48)
   msg2 = msg2 - 1
Endif
return .f.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Uso da DLL Daruma com XHarbour

Mensagem por marcos.gurupi »

Obrigado pela resposta. Por gentileza onde eu posso encontrar a documentacao da dll para q eu possa implementar as outras funcoes da impressora ?

Marcos Roberto
Marcos Roberto
NetService Software
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Uso da DLL Daruma com XHarbour

Mensagem por alaminojunior »

Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Uso da DLL Daruma com XHarbour

Mensagem por marcos.gurupi »

Alamino, estou fazendo um teste aqui tentando emitir uma leitura X, lembro q nao tenho ecf daruma conectado ao meu equipamento sendo assim nao teria q me responder alguma coisa. Eh q quando envio o comando para leitura X ela n me retorna nada. Onde eu mudo o status do registro do windows. Pode ser isso.

Marcos Roberto
Marcos Roberto
NetService Software
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Uso da DLL Daruma com XHarbour

Mensagem por alaminojunior »

Vá em HKEY_LOCAL_MACHINE\SOFTWARE\DARUMA\ECF e ajuste a chave StatusFuncao para 1.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Responder