## Paso 3: Crear el fichero .h

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.

Ejecuta 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.

Ozito