JAVA NATIVE INTERFACE (JNI)
JAVA NATIVE INTERFACE (JNI)
JAVA NATIVE INTERFACE (JNI)
- No tags were found...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>JAVA</strong> <strong>NATIVE</strong> <strong>INTERFACE</strong> (<strong>JNI</strong>)<br />
INVOCANDO C/C++ DESDE <strong>JAVA</strong><br />
Java proporciona un marco denominado Java Native Interface (<strong>JNI</strong>), con la que es posible<br />
escribir métodos nativos. Un método nativo es un método que se mapea a una función de<br />
una librería de código nativo, tal como un DLL en Windows. Por ejemplo, se puede escribir<br />
código en C o C ++ y llamarlo desde Java.<br />
Ejemplo utilizando Ms Visual Estudio 2010<br />
Las etapas para la implementar un proyecto en el que se invoque código C/C++ desde java<br />
son:<br />
1. Crear en Visual Estudio un proyecto en C / C ++ de tipo DLL .<br />
2. Escribir las firmas de método Java para los métodos nativos<br />
3. Compilar el archivo Java y ejecutar la herramienta javah para crear archivos de<br />
encabezados en lenguaje C correspondientes a las firmas de los métodos del punto<br />
anterior.<br />
4. Asegurarse que el proyecto incluye los directorios que contienen los encabezados<br />
<strong>JNI</strong> en sus includes<br />
5. Basándose en los encabezados, escribir las implementaciones nativas de los<br />
métodos (en C / C + +);<br />
6. Compilar la DLL;<br />
7. En el código de Java, llamar System.loadLibrary () para enlazar la librería en tiempo<br />
de ejecución, y a continuación, invocar los métodos nativos.<br />
1. Crear en Visual Estudio un programa en C / C ++ proyecto de tipo DLL<br />
En la herramienta Visual estudio ejecutar el comando file->new project
Click OK y aparece la pantalla siguiente:<br />
Clik Next<br />
Seleccionar DLL y Click en Finish.
2. Crear directorio y escribir las firmas de método Java para los métodos nativos<br />
Crear un directorio donde residirá el proyecto Java (en este ejemplo es<br />
C:\Users\ProgAva\Desktop\DADI\square). A continuación, escriba la firma del método<br />
que vamos a implementar de forma nativa. En general, esto se parece a una firma de<br />
método ordinario de Java, pero con el modificador native. Contenido del archivo<br />
Square.java<br />
package math;<br />
class Square {<br />
public native int getSquare(int x);<br />
static {<br />
System.loadLibrary("Square");<br />
}<br />
public static void main(String[] args) {<br />
int y=new Square().getSquare(4);<br />
System.out.println(" Y = "+y);<br />
}<br />
}<br />
Contenido del archivo Square.java<br />
Contenido del directorio DADI/square<br />
3. Compilar el archivo Java y ejecutar la herramienta javah para crear archivos de<br />
encabezados en lenguaje C<br />
Compilación y generación de encabezado
Nuevo contenido del directorio DADI/square<br />
<strong>JNI</strong>EXPORT jint <strong>JNI</strong>CALL Java_math_Square_getSquare(<strong>JNI</strong>Env *, jobject, jint);<br />
Firma de la función en C/C++ (tomada del archivo math_Square.h)<br />
4. Asegurar que el proyecto incluye los directorios que contienen los encabezados <strong>JNI</strong> en<br />
sus includes<br />
En la pantalla de Visual Estudio hacer click con el botón derecho sobre el nombre del<br />
proyecto y seleccionar la opción properties:
Aparecerá la siguiente ventana:<br />
Agregar en Additional Include Directories los directorios del JDK que contienen archivos<br />
de encabezados en lenguaje C que soportan programación en código nativo usando <strong>JNI</strong><br />
(modifique dependiendo de su directorio de instalación de JDK):<br />
• C:\Program Files\Java\jdk1.6.0_20\include<br />
• C:\Program Files\Java\jdk1.6.0_20\include\win32<br />
• Agregar también el directorio donde se encuentre math_Square.h a las librerías del<br />
proyecto en el caso de este ejemplo es el directorio<br />
C:\Users\ProgAva\Desktop\DADI\square<br />
Asegurarse de que la librería a generar<br />
corresponda a su plataforma Java. Por<br />
ejemplo para x64: Click en el botón<br />
Configuration Manager ubicado en la<br />
esquina superior derecha de la ventana<br />
de properties aparece:<br />
Selección de la plataforma
5. Basándose en los encabezados, escribir las implementaciones nativas de los métodos<br />
(en C / C + +)<br />
Ahora, tenemos que escribir la función de C que será nuestra implementación del método<br />
nativo. Para ello, en primer lugar, copie la firma de función en un programa en C / C + +<br />
del archivo math_Square.h. Visual Studio habrá creado un archivo de código fuente<br />
predeterminada a la que se puede agregar la función. En este proyecto llamado "Square",<br />
Visual Studio agregó un archivo llamado Square.cpp. Así que se copia la línea anterior en<br />
Square.cpp, añadiendo los nombres de las variables y un cuerpo de método. También se<br />
incluye el archivo de encabezados math_Square.h , ya que este a su vez incluye los<br />
encabezados <strong>JNI</strong>, que vamos a necesitar para acceder a funciones <strong>JNI</strong> y tipos de datos. El<br />
resultado es el siguiente:<br />
// Square.cpp : Defines the exported functions for the DLL application.<br />
#include "stdafx.h"<br />
#include <br />
#include "math_Square.h"<br />
#include <br />
<strong>JNI</strong>EXPORT jint <strong>JNI</strong>CALL Java_math_Square_getSquare(<strong>JNI</strong>Env * a, jobject b, jint x)<br />
{<br />
return x*x;<br />
}<br />
Implementación del método en C++<br />
6. Compilar la DLL
7. En el código de Java, llamar System.loadLibrary () para enlazar la librería<br />
Instalar la librería en donde la pueda localizar la JVM por ejemplo en la misma carpeta<br />
donde está el archivo Java. (La librería puede ser localizada haciendo click derecho sobre<br />
el nombre del proyecto y seleccionando Open Folder in Windows Explorer)<br />
Ir al directorio Square\x64\Debug<br />
Copiar el archivo Square.dll Y copiarlo en la carpeta donde está el .java<br />
Contenido final del directorio DADI/square
Ejecución del programa Java