Acessando a dll da Bematech pelo JNA

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?

posta o erro aí pra gente ver.

Até mais

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

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

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.

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.

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

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!