Já tentei usar o JNI, mas só tá dando erro no teste q fiz (antes q fazer com a dll da BEMATECH).
Estrutura do projeto:
JNI
- teste
- Calculadora.class
- Calculadora.java
- Calculadora.dll
- teste_Calculadora.h
- Calculadora.c
Minha classe é:
package teste;
import javax.swing.JOptionPane;
public class Calculadora
{
public native void helloJNI();
public native int soma(int a, int b);
static
{
System.loadLibrary("Calculadora");
}
public static void main(String[] args)
{
Calculadora calc = new Calculadora();
calc.helloJNI();
int c = calc.soma(5,6);
JOptionPane.showMessageDialog(null, c, "Calculadora", 1);
}
}
Daí gerei o arquivo teste_Calculadora.h com o javah
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class teste_Calculadora */
#ifndef _Included_teste_Calculadora
#define _Included_teste_Calculadora
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: teste_Calculadora
* Method: helloJNI
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_teste_Calculadora_helloJNI
(JNIEnv *, jobject);
/*
* Class: teste_Calculadora
* Method: soma
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_teste_Calculadora_soma
(JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
Então gerei o arquivo Calculadora.c :
#include <stdio.h>
#include <jni.h>
#include "teste_Calculadora.h"
JNIEXPORT void JNICALL Java_teste_Calculadora_helloJNI
(JNIEnv *env, jobject obj)
{
printf("Hello JNI!");
}
JNIEXPORT jint JNICALL Java_teste_Calculadora_soma
(JNIEnv *env, jobject obj, jint a, jint b)
{
return a + b;
}
Para gerar a dll baixei o cygwin para compilar e usei o seguinte comando:
gcc -Wall -mno-cygwin -I “C:\Arquivos de programas\Java\jdk1.6.0_02\include” -I “C:\Arquivos de programas\Java\jdk1.6.0_02\include\win32” -shared -o Calculadora.dll Calculadora.c
Então quando vou rodar a classe Calculadora aparece o seguinte erro:
Exception in thread “main” java.lang.UnsatisfiedLinkError: teste.Calculadora.helloJNI()V
at teste.Calculadora.helloJNI(Native Method)
at teste.Calculadora.main(Calculadora.java:19)