Implementación de clases java con métodos nativos escritos en C++ (JNI)

El objetivo de este tutorial es mostrar como se puede implementar una clase Java con métodos nativos escritos en C++ y contenidos en una DLL de Windows, utilizando JNI

Indice


1.Introduccion………………………………………………………………………………………………………………………… 2

2.Declaracion de la clase nativa…………………………………………………………………………………………………. 3

3.Implementacion de los metodos de la DLL…………………………………………………………………………………. 4

3.1.Nomenclatura de los metodos………………………………………………………………………………………….. 4

3.2.Convencion de llamada…………………………………………………………………………………………………… 4

3.3.Manipulacion de objetos………………………………………………………………………………………………….. 4

3.4.Manejo de excepciones………………………………………………………………………………………………….. 4

3.4.1.Capturar excepciones lanzadas por la
parte Java……………………………………………………………. 4

3.4.2.Lanzar excepciones a la parte Java…………………………………………………………………………….. 5

4.Ejemplo de implementación……………………………………………………………………………………………………. 6

4.1.Parte Java……………………………………………………………………………………………………………………. 6

4.2.Parte C++……………………………………………………………………………………………………………………. 7

4.3.Paso a paso………………………………………………………………………………………………………………… 8

5.Apendice………………………………………………………………………………………………………………………….. 11

5.1.Secuencias de escape en los nombres de
funcion……………………………………………………………….. 11

5.2.Signaturas de funcion……………………………………………………………………………………………………. 11

5.3.Equivalencia de tipos primitivos……………………………………………………………………………………….. 12

5.4.Equivalencia de tipos compuestos……………………………………………………………………………………. 12


1.              
Introduccion

El objetivo de este tutorial es mostrar
como se puede implementar una clase Java con metodos nativos escritos en C++ y
contenidos en una DLL de Windows. Se puede extrapolar facilmente a Unix,
generando librerias compartidas de Unix (normalmente ficheros con extension
.so) en vez de DLLs.

El mecanismo JNI de Java viene incluido
con cualquier JDK de Sun y consiste en unos ficheros .h que hay en el
directorio include del JDK. Dichos ficheros .h definen la interfaz
entre nuestra DLL nativa y la JVM.

Para crear una clase Java con metodos
nativos solo hay que marcar los metodos de la clase con la palabra native
y, despues, implementarlos en la DLL siguiendo una convenciones sencillas.

A la hora de ejecutar solo es necesario
que nuestra clase Java carque la DLL con los metodos nativos mediante una
llamada a System.loadLibrary. La DLL se buscara en el PATH de Windows y
en todos los directorios apuntados por la propiedad del sistema Java llamada java.library.path.

Este tutorial tiene dos capitulos
genericos (2 y 3) que explican como se implementan los metodos nativos, un
capitulo 4 con un ejemplo, y un apendice con referencias extraidas de la
documentacion del JDK 5.0 de Sun.

2.              
Declaracion de la clase
nativa

Lo primero que tenemos que hacer es
crear un fichero .java con la definicion de la clase como si fuesemos a
escribir una clase Java normal. Todos los metodos que esten implementados en la
DLL nativa deben llevar el prefijo native.

Además, hay que definir el constructor
estatico de la clase y, dentro de el, llamar a System.loadLibrary para
cargar la DLL que implementara los metodos nativos.

Ejemplo:

package
autentia;  

 

class
Cls

{

     // Metodo implementado nativamente

     native double f(int i, String s);

 

     // Inicializacion de la clase

     static

     {

         // Cargar la DLL que implementa la
clase

         System.loadLibrary(“pkg_autentia”);

     }

}

 

La DLL se puede llamar como queramos,
no hay ninguna restriccion sobre el nombre. Lo importante son los nombres de
los metodos.

Este .java hay que compilarlo y nos
dara un .class que, al usarlo, cargara la DLL y llamara a los metodos nativos.
Si no se carga la DLL, la JVM lanzara una excepcion UnsatisfiedLinkError
al llamar a los metodos nativos.

3.              
Implementacion de los metodos
de la DLL

3.1.       
Nomenclatura de los metodos

Los nombres de los metodos deben seguir
una convención predefinida:

        
Metodos sobrecargados: Java_<clase cualificada>_<nombre del
metodo>__<signatura de los argumentos>

        
Metodos unicos: Java_<clase cualificada>_<nombre del
metodo>__<signatura de los argumentos>

Existen ciertas secuencias de escape
para los nombres de los metodos que estan listadas en el apéndice. Asimismo, se
puede consultar en el mismo apéndice una explicacion de como se compone la
signatura de los argumentos. La signatura describe los argumentos que recibe el
metodo de forma inequivoca y es necesaria puesto que, debido a la sobrecarga,
metodos con el mismo nombre pueden recibir distintos argumentos.

3.2.       
Convencion de llamada

La convencion de llamada de los
argumentos implementados nativamente es la siguiente:

        
Para Win32 se usa la
convencion de llamada __stdcall (PASCAL).

        
Para Unix se usa la
convencion de llamada __cdecl (C).

        
Parametros:

Comentarios

Un comentario

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

He leído y acepto la política de privacidad

Información básica acerca de la protección de datos

  • Responsable: IZERTIS S.A.
  • Finalidad: Envío información de carácter administrativa, técnica, organizativa y/o comercial sobre los productos y servicios sobre los que se nos consulta.
  • Legitimación: Consentimiento del interesado
  • Destinatarios: Otras empresas del Grupo IZERTIS. Encargados del tratamiento.
  • Derechos: Acceso, rectificación, supresión, cancelación, limitación y portabilidad de los datos.
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad

Consultor tecnológico de desarrollo de proyectos informáticos.Ingeniero en Informática

¿Quieres publicar en Adictos al trabajo?

Te puede interesar

02/03/2026

José Antonio Sánchez Segovia

Zephyr es un RTOS open source respaldado por la Linux Foundation que permite desarrollar dispositivos embebidos conectados, eficientes y escalables, facilitando el paso de prototipo a producto final con una arquitectura mantenible.

23/02/2026

Enrique Casado Díez

LoRa y LoRaWAN son tecnologías clave en el ecosistema IoT cuando se requiere largo alcance y bajo consumo energético. En este artículo analizamos su funcionamiento, Spreading Factor, link budget, arquitectura de red, frecuencias y clases de dispositivos, con un caso práctico real.

19/02/2026

Juan José Díaz Antuña

Copilot Chat es la forma más sencilla y segura de empezar a usar IA en Microsoft 365. En este artículo vemos cómo funciona, cómo activarlo y en qué se diferencia de Microsoft 365 Copilot, Copilot Studio y los Agentes Inteligentes, con ejemplos prácticos y una comparativa clara.