(resolvido) jna

8 respostas
jonasjgs2

caros amigos, eu estou desenvolvendo um aplicativo para trabalhar com uma impressora fiscal bematech
e ja havia colocado um post que ate agora ficou sem solucao…
eu consegui dar alguns passos por isso resolvi postar novamente…
seguinte:
a bematech dispoe de um .jar porem trabalhando com jni
e eu quero desenvolver em jna

as rotinas desta dll trabalham por referencia, o java trabalha por valor…
sendo assim eu consegui alguns exemplos na net que consegui passar estes valores
por referencia…
porem so quando eles sao strings
mas tenho um metodo que e int

como exemplo eu vou ilustrar para vcs um metodo que consegui por pra funcionar e que nao dar problemas:

public int Bematech_FI_ModeloImpressora(StringByReference modelo);

este metodo esta funcionando sem nenhum problema… ele me retorna a string modelo
porem no metodo:

public  int Bematech_FI_VerificaEstadoImpressora(int ack,int st1, int st2);

me da um dump…
ja descobri que esta dump e que a dll nao esta entendendo os parametros

entao depois de muita pesquisa descobri o uso do PointerByReference
como o metodo abaixo:

public  int Bematech_FI_VerificaEstadoImpressora(PointerByReference ack,
        PointerByReference st1,
        PointerByReference st2);

porem ele so me retorno o primeiro parametro o segundo nao me retorna, ou seja, ele me retorna null…
alguem pode me ajudar…

desde ja agradeco… ja estou ha horas correndo atraz disso…

8 Respostas

drsmachado

E qual o valor retornado? Já viu na documentação que este valor indica algo?

jonasjgs2

eu trabalho ja com a bematech em outra linguagem
e funciona perfeitamente… conheco muito bem a dll…
so com o java que estou tendo este problema

drsmachado

Ok, então me diga, qual o retorno?

jonasjgs2

o ack e um int
o st1 e outro int
e st2 e outro int

dependendo do estado da impressora
ela retorna valores diferentes
o estado atual da impressora
ela deve retornar 6 para ack, 0 para st1 e 0 para st2

drsmachado

Acho que não estamos falando a mesma última flor do lácio, inculta e bela…
Camarada, estou perguntando qual o valor do retorno e não qual deveria ser a estrutura do retorno, compreendeu?

E

Você tem a declaração em C dessa rotina da Bematech?

Acho que você não leu corretamente a (parca) documentação do JNA e está tentando , um após o outro, os tipos do JNA.

jonasjgs2

entanglement…
descobri o que acontece…

a rotina do geito que esta escrita funciona
porem e o seguinte:
como o retorno e um int…
e a impressora neste momento esta me retornando
6,0,0
o zero pelo jna esta sendo tratado com se fosse um valor null…
eu modifiquei a impressora para ela me retornar
um valor diferente de 6,0,0
e ela modificou o segundo valor

entao…
da maneira que estou fazendo esta correto
na minha aplicacao quando a impressora retornar
null eu trato o campo como 0…

obrigado… pela disposicao de ajudar…
e por isso que eu sou membro do guj…
e o meu exemplo ai ja fica como estudos para
outro membro…
porque do geito que esta esta correto…
basta tratar o valor null como zero…

agradeco pela ajuda…

drsmachado

jonasjgs2:
entanglement…
descobri o que acontece…

a rotina do geito que esta escrita funciona
porem e o seguinte:
como o retorno e um int…
e a impressora neste momento esta me retornando
6,0,0
o zero pelo jna esta sendo tratado com se fosse um valor null…
eu modifiquei a impressora para ela me retornar
um valor diferente de 6,0,0
e ela modificou o segundo valor

entao…
da maneira que estou fazendo esta correto
na minha aplicacao quando a impressora retornar
null eu trato o campo como 0…

obrigado… pela disposicao de ajudar…
e por isso que eu sou membro do guj…
e o meu exemplo ai ja fica como estudos para
outro membro…
porque do geito que esta esta correto…
basta tratar o valor null como zero…

agradeco pela ajuda…


Ou seja, o fato de trocar os int por PointerByReference acabou fazendo mais diferença que apenas a forma de requisição, o retorno também mudou.

Criado 19 de março de 2013
Ultima resposta 19 de mar. de 2013
Respostas 8
Participantes 3