Alguien que leyo, vio, trabajo o se pregunto que es jni; debe haberse dado cuenta que es complejo. Esta complijida se ve disminuida casi a 0 con JNA.
Parece publicidad barata pero es verdad. Si te digo que con una interfaz podes usar funciones que se encuentran en una dll?
Mira, tengo la siguiente dll:
// dllParaPruba.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
extern "C"
{
//---------------------------------------------------------------------------
double __declspec(dllexport) multiplicar(double a, double b)
{
return a * b;
}
//---------------------------------------------------------------------------
double __declspec(dllexport) sumar(double a, double b)
{
return a + b;
}
//---------------------------------------------------------------------------
double __declspec(dllexport) potencia(double a, double n)
{
double acumulador = 1;
for (int i = 0; i <>
acumulador*=a;
}
return acumulador;
}
}
Y yo desde java quiero leerla y usarla, bueno tengo que escribir la siguiente interfaz:
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Platform;
/**
*
* @author Emanuel
*/
public interface EjemploJNA extends Library {
EjemploJNA INSTANCE = (EjemploJNA)
Native.loadLibrary("dllParaPruba",
EjemploJNA.class);
double multiplicar(double a, double b);
double sumar(double a, double b);
double potencia(double a, double b);
}
Bueno ahora vamos hacer un test:
import org.junit.Test;
import static org.junit.Assert.*;
/**
*
* @author Emanuel
*/
public class EjemploJNATest {
static {
System.load("pathDondeSeEncuentraMiDll\dllParaPruba.dll");
}
@Test
public void sumar(){
double resultado = EjemploJNA.INSTANCE.sumar(2.3, 4.5);
assertEquals(new Double(resultado), new Double(6.8));
}
@Test
public void multiplicar(){
double resultado = EjemploJNA.INSTANCE.multiplicar(2.3, 4.5);
assertEquals(new Double(resultado), new Double(10.35));
}
@Test
public void potencia(){
double resultado = EjemploJNA.INSTANCE.potencia(2, 4);
assertEquals(new Double(resultado), new Double(16));
}
}
Listo!!
Que lo pario dijo mendieta!!
Una cosa me queda por aclarar es que compile la dll con el compilador de borland y no me fue muy bien, explotaba (no se bien por que) use el de microsoft y no hubo problema.
El que quiera más info dejo el link: https://jna.dev.java.net/
Y para toda la gente linda que usa maven la entrada en el pom:
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>3.2.2</version>
</dependency>
Saludos!!!