Utilizar el Java Native Interface (JNI)

En este paso se utiliza el programa de utilidad javah para generar un fichero de cabecera (un fichero .h) desde la clase Java HelloWorld. El fichero de cabecera proporciona un prototipo de funci�n para la implementaci�n del m�todo nativo displayHelloWorld() definido en esta clase.

Ejecutamos javah ahora sobre la clase HelloWorld que se cre� en los pasos anteriores.

Por defecto, javah sit�a el nuevo fichero .h en el mismo directorio que el fichero .class. Se utiliza la opci�n -d para instruir a javah para que sit�e el fichero de cabecera en un directorio diferente.

El nombre del fichero de cabecera es el nombre de la clase java con extensi�n .h. Por ejemplo, el comando anterior generar� un fichero llamado HelloWorld.h.

.�La definici�n de Funci�n

Mira el fichero de cabecera HelloWorld.h.

#includejava example-1dot1/HelloWorld.h

Java_HelloWorld_displayHelloWorld() Es la funci�n que proporciona la implementaci�n del m�todo nativo de la clase HelloWorld, que se escribir� en el Paso 4: Escribir la Implementaci�n del M�todo Nativo. Se utiliza la firma de la funci�n cuando se escribe la implementaci�n del m�todo nativo.

Si HelloWorld contuviera otros m�todos nativos, sus firmas de funci�n deber�an aparecer aqu� tambi�n.

El nombre de la funci�n en el lenguaje nativo que implementa el m�todo nativo consiste en el prefijo Java_, el nombre del paquete, el nombre de la clase, y el nombre del m�todo nativo. Entre cada nombre de componnete hay un subrayado"_" como separador. El nombre de paquete se omite cuando el m�todo est� en el paquete por defecto.

As�, el m�todo nativo displayHelloWorld dentro de la clase HelloWorld se convierte en Java_HelloWorld_displayHelloWorld(). En nuestro ejemplo, no hay nombre de paquete, porque HelloWorld est� en el paquete por defecto.

Observa que la implementaci�n de la funci�n en el lenguaje nativo, que aparece en el fichero de cabecera, acepta dos par�metros, aunque en su definici�n en lenguaje Java no aceptar� ninguno. El JNI requiere que cualquier m�todo nativo tenga estos dos par�metros. El primer par�metro es un puntero a un interface JNIEnv. A trav�s de este puntero, el c�digo nativo podr� acceder a los par�metros y objetos de la aplicaci�n Java. El par�metro jobject es una referencia al propio objeto. Para un m�todo nativo no-est�tico como el m�todo displayHelloWorld de nuestro ejemplo, este argumento es una referencia al objeto. Para m�todos nativos est�ticos, este argumento ser�a una referencia al m�todo Java. Para aclararlo un poco, se puede pensar en el par�metro jobject como en la variable "this" de C++. Nuestro ejemplo ignora �mbos par�metros.

La siguiente lecci�n Programaci�n del Interface Nativo en Java, describe como acceder a los datos utilizando el par�metro env.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO