Fórum JNA com DLL da ECF Urano (Protocolo Fiscnet) #377077

06/05/2010

0

Boa tarde colegas!

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

Giuliano Ribeiro

Responder

Posts

07/05/2010

Andrei Hirata

Cara.primeiro, teste a dll da urano em linguagem java com um exemplo feito pela empresa.

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?

Responder

Gostei + 0

08/05/2010

Giuliano Ribeiro

Cara.primeiro, teste a dll da urano em linguagem java com um exemplo feito pela empresa.

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.




Responder

Gostei + 0

09/05/2010

Dyego Carmo

JNI acessa e faz isso que voce quer..

tentou via JNI ?

Responder

Gostei + 0

09/05/2010

Giuliano Ribeiro

JNI acessa e faz isso que voce quer..

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.


Responder

Gostei + 0

10/05/2010

Dyego Carmo

O problema do JNA é justamente a ponte de conexão entre os dois mundos , tudo fica mais complexo e cheio de possibilidades de erros.

Responder

Gostei + 0

10/05/2010

Giuliano Ribeiro

O problema do JNA é justamente a ponte de conexão entre os dois mundos , tudo fica mais complexo e cheio de possibilidades de erros.



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.
Responder

Gostei + 0

14/05/2010

Dyego Carmo

Esta DLL é feita em .NET ou C puro ?

Responder

Gostei + 0

17/05/2010

Giuliano Ribeiro

Segundo o pessoal do suporte da Urano é feita em C++
Responder

Gostei + 0

18/05/2010

Dyego Carmo

Estranho , era para estar funcionando...

Tentou acessar de alguma outra linguagem para ver se não pode ser um vazamento da DLL ?

Responder

Gostei + 0

19/05/2010

Giuliano Ribeiro

Estranho , era para estar funcionando...

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!


Responder

Gostei + 0

22/05/2010

Dyego Carmo

Muito estranho, fiquei de mãos atadas agora :(
Responder

Gostei + 0

13/08/2010

Letícia Netto

  Bom Dia,

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!
Responder

Gostei + 0

13/08/2010

Dyego Carmo

Funcionou ?

Responder

Gostei + 0

06/08/2015

Luiz Fernando

gui

a minha ecfs Bematech e Sweda não esta funcionando. tem alguma dica para me ajudar.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar