Jni

Hola,
Estoy programando en Java pero necesito las librerías dcmtk de C++ porque las jdt no son "libres".
Se que tengo que usar jni para usar librerías en código nativo, pero no se cómo. En los manuales que he buscado no consigo enterarme.
Muchas gracias de antemano,
Miguel Ángel
4

4 respuestas

Respuesta
1
Estuve averiguando sobre manuales respecto a jni y me fije que son bastante pobres y ademas en ingles lo cual es medio latoso leer pero encontré un manual en pdf muy bueno..
En la página:
http://www.abcdatos.com/tutoriales/tutorial/l6430.html
Este tutorial esta bastante completo y creo que con el podrás llegar a bun norte..
Respuesta
1
Hermano lamento decirte que nunca he hecho algo así una vez leí algo de eso si buscas un manual que te pueda ayudar busca el google java + tutorial y bajate uno de la página pichangua ese te podrá dar una mano con lo que buscas
Respuesta
1
Miguel Angel,
Le he echado un vistazo a la librería dcmtk y la tarea a la que te enfrentas es bastante dura, pues es una librería muy compleja con múltiples tipos de datos. Es normal que te pierdas.
La solución es hacer un wrapper de la librería que ofrezca una interfaz mucho más simplificada a la aplicación Java, para minimizar las conversiones de tipos.
No necesitas mapear todos los métodos de todas las clases. Sólo los que vayas a utilizar.
Por ejemplo para invocar la siguiente función desde Java :
OFCondition ASC_initializeNetwork(T_ASC_NetworkRole role,int acceptorPort,int timeout,T_ASC_Network ** network, unsigned long options = 0);
Necesitarías crear equivalentes en Java de las structs T_ASC_NetworkRole y T_ASC_Network, además de la clase OFCondition para el valor de retorno.
Eso significa crear en Java las clases Assoc (donde está el método ASC_initializeNetwork) NetworkRole, Network y OFCondition además de las clases de las que dependan éstas: Aquellas que aparecen como atributos o parámetro de alguno de sus métodos.
Sin embargo, si escribes sólo en la clase Assoc un método como este:
public native boolean initializeNetwork(int acceptorPort,int timeout, unsigned long options);
Y en la implementación del método en JNI te ocupas de crear los objetos T_ASC_NetworkRole y T_ASC_Network (puede que necesites algún parámetro adicional, pero siempre que sean tipos básicos de java, arrays o Strings) para invocar al método de la librería.
Si tienes dudas más básicas sobre JNI, el tutorial de Sun me parece se sigue bien, ya que creo que lo que te abruma es la complejidad de la librería dcmtk.
Empieza poco a poco, siguiendo el tutorial y estos consejos e intenta invocar un sólo método de la librería (y si es void y sin parámetros mejor :-) y luego añade progresivamente método más complejos y en poco tiempo lo tendrás dominado.
Si necesitas más ayuda no dudes en preguntarme.
Respuesta
Épale pana, aquí te adjunto un link en donde creo que te puedes bajar esa librería gratis. Disculpa no pueda ayudarte más, pero la verdad nunca he trabajado con esas librerías.
Suerte!
Daniel J. Giménez A.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas