Utilizando DLL ( ECF Bematech )

Galera uma dúvida,

Eu uso as DLLs da Bematech, atualmente existe uma dll da bematech a BemaFI32.dll, para utiliza-la só é necessario fazer o System.loadLibrary e usar os métodos de acordo com os que foram fornecidos na documentação.

A minha dúvida é a seguinte, eu tenho outra DLL da bematech com alguns comandos, eu tenho a assinatura do método que prentendo usar, mas não consigo. Eu tenho o " unsatisfiedLinkError ". O que gostaria de saber é se é possível usar as funções de uma DLL apenas sabendo sua assinatura ou a DLL precisa ser compilada de forma especial ? Eu estava lendo sobre JNI mas todos os tutoriais e explicações que achei, eles falam apenas de DLLs que você mesmo escreveu, não dão exemplo com DLLs de terceiros.

O arquivo que uso com as assinaturas é o seguinte

public class Bematech {

    public static native int AlteraSimboloMoeda(String simboloMoeda);
	public static native int AbreCupom(String CPF_CGC);
	public static native int AumentaDescricaoItem(String descricao);

     // Mais métodos aqui

static {
       System.loadLibrary ("BemaFI32");
}

}

O que eu fiz foi mudar o código a seguir para o seguinte:

public class Bematech {

    public static native int AlteraSimboloMoeda(String simboloMoeda);
	public static native int AbreCupom(String CPF_CGC);
	public static native int AumentaDescricaoItem(String descricao);
    //Método novo que eu adicionei
   	public static native int BemaGeraRegistrosTipoE(String param1, String param2 );// São 21 parametros na assiantura, apenas os omiti aqui no post
     // Mais métodos aqui


Static{
   System.loadLibrary ("BemaFI32");
   System.loadLibrary("BemaMFD2");
}

}

Se alguem tiver uma luz…

Valeu

Dá uma olhada neste post e vê se resolve http://www.guj.com.br/posts/list/132837.java
E neste site http://javaniando.blogspot.com/2008/02/acessando-bibliotecas-nativas-com-jna.html

meu maior problema é não conhecer o código fonte da minha DLL, eu tenho apenas a assinatura =/

Eu já consegui fazer os exemplos usando Structure e etc, mas não consigo acessar essa DLL, acho que o pessoal da Bematech me passou a assinatura errada = / …

Valeu pela força Eliangela, vou continuar pesquisando JNA, qualquer novidade posto aqui. Os links foram muito uteis, obrigado denovo.

Consegui resolver o problema,

A questão é que minha DLL seguia o padrão STD, portando foi só alterar minha interface e também faltava 1 S na chamada do método, ficou assim

package testes;
import com.sun.jna.win32.StdCallLibrary;

public interface BemaMFD2 extends StdCallLibrary {
   
   public int BemaGeraRegistrosTipoE (String param1,
         String param2,
         String param3, 
         String param4, 
         String param5, 
         String param6, 
         String param7, 
         String param8, 
         String param9, 
         String param10, 
         String param11, 
         String param12, 
         String param13, 
         String param14, 
         String param15, 
         String param16, 
         String param17, 
         String param18, 
         String param19, 
         String param20, 
         String param21 );

}

E a classe que utiliza isso


package testes;

import com.sun.jna.Native;

public class TestaArquivoBematech {

   static {
      System.loadLibrary ("BemaMFD2");
   }
   
   public static void main(String[] args) {
      
      String arquivoMfd = "C:\\BEMAMFD.MFD";
      String arquivoEspelho = "C:\\ESPELHO.TXT";
      String dataInicial = "280709";
      String dataFinal = "280709";
      String usuario = "1";

      BemaMFD2 lib = (BemaMFD2) Native.loadLibrary( "BemaMFD2", BemaMFD2.class );
      
      int iretorno =  lib.BemaGeraRegistrosTipoE(arquivoMfd, 
            "C:\\cOTEPe.txt", 
            dataInicial, 
            dataFinal, 
            "ShxInformatica",
            "Alameda dos guatas",
            null,
            "2",
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null,
            null );
      
      
         System.out.println( "retorno do arq. mfd = "+ iretorno );
   }
}

bom galera tem um amigo meu q fez nao utiliaza DLL direto
http://acbr.sourceforge.net/drupal/?q=node/11
espero q ajudem ele tembem