Acessando a dll da Bematech pelo JNA

7 respostas
R

Estou tentando comunicar com a dll da Bematech através do JNA, meu primeiro passo é tentar fazer a LeituraX então eu fiz da seguinte forma:

INTERFACE “BematechJNA.java”

package ECF3;

import com.sun.jna.Library;


/**
 *
 * @author FISCAL
 */
public interface BematechJNA extends Library {
    /** Creates a new instance of BematechJNA */
    public void LeituraX();
    
}

Classe de Acesso: “DriverECF2.java”

package ECF3;

import com.sun.jna.*;
import com.sun.jna.NativeLibrary;
/**
 *
 * @author FISCAL
 */
public class DriverECF2 {
    
    /** Creates a new instance of DriverECF2 utilizando JNA */
    public DriverECF2() {
       BematechJNA bematech = (BematechJNA)Native.loadLibrary("BemaFI32",BematechJNA.class);
       bematech.LeituraX();
    }


  
    
}

Na hora que executa o bematech.LeituraX(); da erro… Gostaria de saber no que eu errei?

7 Respostas

eliangela

posta o erro aí pra gente ver.

Até mais

Abdon

Cara a dll da Bematech já é javalike basta vc declarar todos os metodos como native e dar um System.loadLibary

http://www.guj.com.br/posts/list/30389.java

R

Eu consegui achar o problema… estava no extends da interface ao invés de herdar de Library herda de StdCallLibrary… Ficando algo assim:

public interface BematechJNA extends StdCallLibrary {

/** Creates a new instance of BematechJNA */

public int Bematech_FI_LeituraX();

}

muito obrigado pela ajuda!
A bematech ainda não colocou as novas função como geração de “Arquivo MFD”, então precisarei colocar no JNA

tgcamargo

Estava com o mesmo problema que você, ricardoluizv.

Só que agora ao tentar assinar um arquivo utilizando a DLL sign_bema. Ela assina o arquivo, consigo gerar o xml, só que apresenta o seguinte erro:

Implementei da seguinte forma:

import com.sun.jna.Native;
import com.sun.jna.win32.StdCallLibrary;

public interface AssinaturaDigital extends StdCallLibrary  {

    public AssinaturaDigital Instance = (AssinaturaDigital) Native.loadLibrary("sign_bema", AssinaturaDigital.class);

    public int genkkey(byte[] cpublica, byte[] cprivada);
    public int generateEAD(String cNomeArquivo, String cChavePublica, String cChavePrivada, byte[] cEAD, int iSign);

}

Alguma idéia do que possa ser??
Grato.

R

Parece ser erro de memória, parece que algo está travando sua aplicação. Se sua chave está sendo feito pela Daruma, aconselho que você entre no suporte da Daruma, esse é o skype deles: suporte_desenvolvedores_daruma . Quando você digitar na busca vão aparecer vários contatos adicione todos eles, e fale diretamente com a Aghata.

tgcamargo

ricardoluizv a chave está sendo gerada pela Bematech. Já entrei em contato com eles e me informaram que não há nada para Java, ficaram de me mandar um exemplo em C# a alguns dias e até agora nada. Então resolvi utilizar o JNA e parei neste erro.

Valeu!!

B

Opa!
Seguinte, eu tentei utilizar essa Dll pelo Nlink e acontecia o mesmo erro quando eu usava o genkkey, resolvi pelo seguinte.
Como eu só conseguia enviar uma STRING o Sidnei di suporte da bematech me indicou inserir 256 espaços em branco na String… Resolveu, consigo executar sem erros… Porem eu nao recebo as chaves, executa, mas quando mostro são só os espaços em branco!

Se ajudar… Vou tentar implementar desse modo e ver se consigo resultados!

Ah, andei pesquisando por alguns foruns e encontrei aqui no GUJ um membro dizendo que quando se declara os byte’s se usa o 256 pra mandar para gerar a chave… certo? o JNA precisaria de mais um byte no caso 257

Ainda to tentando implementar isso dai, ooo dor de cabeça!

Criado 18 de dezembro de 2009
Ultima resposta 24 de dez. de 2009
Respostas 7
Participantes 5