miércoles, 16 de julio de 2008

Como utilizar una DLL desde codigo java

En el desarrollo de un sistema que requeria el cargado dinamico de una dll, me surgio la necesidad de mover el proyecto. Consecuencia de esto fue que el sistema dejo de funcionar sin razon aparente. Investigando un poco encontre que el problema era que no se cargaba la dll correctamente, a continuación les dejo el resultado de la investigacion. Espero les sirva ^_^

Existe dos formas diferentes de cargar una libereria nativa desde un programa java en ejecucion:
  • System.loadLibrary(String)

  • System.load(String).

El metodo System.loadLibrary permite cargar una libreria desde la ruta por defecto, en cambio System.loadLibrary permite cargar una libreria desde cualquier lado utilizando la ruta absoluta a la DLL.

Cuando usamos System.loadLibrary, lo único que hace falta especificar el nombre del archivo DLL que queremos cargar. La JVM buscará la DLL especificada en "Java library path". Este camino esta dado por la propiedad: java.library.path system property (Y puede alterarce al utilizar el comando java.exe usando la opcion -D). Por defecto este valor esta relacionado con el Windows path.

Tener en cuenta que el directorio actual es agregado automaticamente al path, por esta razon no es necesario configurar nada siempre y cuando la DLL se encuentre en el directorio de trabajo actual.

Para poder hacer que la JVM cargue la libreria, necesitamos modificar nuestro código Java de la siguiente forma (El nombre de la DLL a cargar es "HelloWorld" y se encuentra en el path):


package example.jni;

public class HelloWorld {
private static native void writeHelloWorldToStdout();

public static void main(String[] args) {
System.loadLibrary("HelloWorld");
writeHelloWorldToStdout();
}
}


La JVM se encarga de resolver la extension dependiendo del sistema operativo.

Una vez realizados los pasos anteriores ya habremos cargado la DLL y seremos capas de usarla.

2 comentarios:

Anónimo dijo...

Podrias hacerme el favor de colocar un ejemplo de como seria la forma de utilizar un metodo de la DLL que se cargo.

Saludos

Anónimo dijo...

si porfa
aiuuuudaaaaaaaaaaaaaaaa
queremos ejemplos