Página 1 de 1

Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 10:23
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

Re: Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 14:05
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.

Re: Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 14:16
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

Re: Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 14:45
por alaminojunior

Re: Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 15:01
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

Re: Uso da DLL Daruma com XHarbour

Enviado: 30 Set 2009 15:51
por alaminojunior
Vá em HKEY_LOCAL_MACHINE\SOFTWARE\DARUMA\ECF e ajuste a chave StatusFuncao para 1.