Fórum JNA com DLL da ECF Urano (Protocolo Fiscnet) #377077
06/05/2010
0
Estou com dificuldade para ler informações (coo, cro,etc) da ecf urano modelo pos-logger.
Estou utilizando JNA para acessar a dll como já faço com as ecfs Bematech e Sweda e funcionam perfeitametne.
Mas no caso da urano só estou conseguindo até o momento enviar os comandos para impressão.
Quando preciso fazer as consultas, a função da dll não retorna erro mas também não retorna a informação.
Vou postar aqui o código para a leitura do coo pra ficar mais claro.
public void consultaCOO() {
dll.DLLG2_LimpaParams(handle);
dll.DLLG2_AdicionaParam(handle, "NomeInteiro", "coo", 7);
int i = dll.DLLG2_ExecutaComando(handle, "LeInteiro");
if (i > 0) {
i = dll.DLLG2_ObtemCodErro(handle);
if (i == 0) {
long tm = 50;
long tr = 6;
byte[] retorno = new byte[6];
if (dll.DLLG2_Retorno(handle, 0,"ValorInteiro", tm, retorno, tr) > 0) {
System.out.println("Coo: " + new String(retorno));
} else {
System.out.println("Nenhum byte de retorno");
System.out.println("Retorno: " + retorno);
}
} else {
String erro = "";
erro = dll.DLLG2_ObtemNomeErro(handle, erro, 0);
System.out.println("Erro:" + erro);
String descricaoErro = "";
descricaoErro = dll.DLLG2_ObtemCircunstancia(handle, descricaoErro, 0);
System.out.println("Circunstancia:" + descricaoErro);
}
}
}
Bom segundo o manual da dll devo passar uma string como referência para a função da dll chamada DLLG2_Retorno que vai me devolver a informação na mesma.
Como Strings em java são imutáveis segui o mesmo principio das implementações usando outras DLLs e também a documentação do JNA e estou passando um array de bytes no lugar de um tipo String.
Já tentei também seguir alguns exemplo que encontrei em outros tópicos aqui do GUJ que trabalham com PointerByReference e também não funcionou.
Consultei o pessoal do suporte da urano e os mesmos não suporte a java.
Só me passaram que a DLL foi feita em C++ e que a função em questão precisa de um parametro do tipo String mesmo.
Também me passaram exemplo em Dephi que funcionou certinho me devolvendo o COO.
É isso!
Espero que alguém já tenha enfrentado esse problema e possa me ajudar com alguma dica, sugestão, exemplo, etc.
Abraço a todos!
Obrigado!
Giu
Giuliano Ribeiro
Curtir tópico
+ 0Posts
07/05/2010
Andrei Hirata
Se não tiver nenhuma solução , é provavel que a função de retorno não seja funcional com a linguagem java. Geralmente isto acontecia nas impressoras de outra marca aonde eu trabalhava.Funcionava em delphi, mas em net tinha alguns bugs, porq a solução naquela linguagem não era 100%.
Vc consegue depurar o codigo e ver que linha ele falha?
Gostei + 0
08/05/2010
Giuliano Ribeiro
Se não tiver nenhuma solução , é provavel que a função de retorno não seja funcional com a linguagem java. Geralmente isto acontecia nas impressoras de outra marca aonde eu trabalhava.Funcionava em delphi, mas em net tinha alguns bugs, porq a solução naquela linguagem não era 100%.
Vc consegue depurar o codigo e ver que linha ele falha?
Psé mas eles não tem exemplo em Java. Não dão suporte algum pra linguagem java.
Já estudei várias opções do JNA e nada funcionou. A função é executada de forma correta e não recebo erro algum mas não recebo o retorno também.
Gostei + 0
09/05/2010
Dyego Carmo
tentou via JNI ?
Gostei + 0
09/05/2010
Giuliano Ribeiro
tentou via JNI ?
Não tentei ainda mas já dei uma lida sobre JNI.
Queria manter tudo utilizando apenas JNA já que JNI e comunicação direta são opções mais trabalhosas comparadas com JNA.
Gostei + 0
10/05/2010
Dyego Carmo
Gostei + 0
10/05/2010
Giuliano Ribeiro
Psé mas o JNA funciona perfeitamente com as DLLs da sweda e da bematech.
Também funciona perfeitamente com a própria ecf Urano nos comandos de impressão inclusive retornando os código de erro e permitindo a consulta da circunstancia do erro na ecf.
Só não está funcionando mesmo para ler algumas informações como coo, número de série.
De qualquer forma estou estudando uma classe que a ELGIN tem disponível em java e que funciona com o protocolo fiscnet (mesmo da ecf urano e ecf dataregis).
Dei uma olhada por cima e aparentemente tem todas as funções da dll. Essa classe se utiliza de comunicação direta via rxtx.
Vou ver se consigo fazer utilizando essa classe e continuar tentando achar o problema do funcionamento com JNA.
Gostei + 0
14/05/2010
Dyego Carmo
Gostei + 0
17/05/2010
Giuliano Ribeiro
Gostei + 0
18/05/2010
Dyego Carmo
Tentou acessar de alguma outra linguagem para ver se não pode ser um vazamento da DLL ?
Gostei + 0
19/05/2010
Giuliano Ribeiro
Tentou acessar de alguma outra linguagem para ver se não pode ser um vazamento da DLL ?
Sim já tentei.
Utilizei um exemplo em Delphi que o pessoal do suporte me forneceu e funcionou certinho.
Atualizei o JNA pra última versão agora e testei, mas sem sucesso.
Tá difícil!
Gostei + 0
22/05/2010
Dyego Carmo
Gostei + 0
13/08/2010
Letícia Netto
Em Delphi, o correto seria desta forma... Exemplo:
DLLG2_Retorno(hd, 0, 'ValorInteiro', 0, RetVar, Length(RetVar));
sendo que a variável RetVar tem que ser do tipo “array [0..255] of AnsiChar”.
Até mesmo do Delphi 2009 para o Delphi 2010 você teria problemas, então você deve declarar em Java RetVar com o correspondente de um array de char e não de byte.
Espero que ajude!
Abraço!
Gostei + 0
13/08/2010
Dyego Carmo
Gostei + 0
06/08/2015
Luiz Fernando
a minha ecfs Bematech e Sweda não esta funcionando. tem alguma dica para me ajudar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)