Utilice las bibliotecas estáticas de Windows del código Java con un esfuerzo mínimo (preferiblemente utilizando JNA)

StackOverflow https://stackoverflow.com/questions/845016

Pregunta

Tengo que usar alguna biblioteca de Windows estática (*.lib) del código de Java, puedo escribir envoltorios JNI de C ++, pero prefiero no hacerlo (no tan experimentado en C ++).

Cuál sería la forma más fácil (menos esfuerzo de desarrollo) de usarlo, el rendimiento no es importante, ya que ese código solo va a obtener algunos datos, que probablemente se trabajarán en el lado de JAVA.

Probablemente usaría JNA , pero AFAIK necesita bibliotecas dinámicas, y tengo estática unos.

También solicitó questio n sobre la conversión de bibliotecas estáticas a dinámicas.

¿Fue útil?

Solución

Por lo que vale, tuve un proyecto como este hace un tiempo. Fue bastante fácil generar automáticamente los contenedores JNI. Creo que teníamos alrededor de 350 exportaciones de funciones para ajustar. Nos llevó alrededor de 3 horas armar un script para generar automáticamente el contenedor (lo siento, no tengo el script a mano o lo publicaría).

Nosotros mismos escribimos casi ningún código de C ++, pero requería entender cómo funciona JNI ... Esa es realmente una buena oportunidad de aprendizaje / proyecto. Si tiene tiempo, no tenga miedo de JNI. asombrado de cuánto aprende sobre cómo funciona la JVM ...

Si sigue esta ruta, le recomiendo que mantenga sus funciones de envoltura muy, muy livianas, literalmente sin ningún procesamiento en ellas. Simplemente transforme los argumentos necesarios de los valores JNI a nativos (esto se necesita principalmente para las cadenas), llame a su función nativa y vuelva a transformar los resultados.

Si tiene una función que pasa un puntero de cadena y espera que la cadena regrese en el puntero, use una matriz de cadena con tamaño 1 desde el lado de Java y llénela con el resultado de la llamada nativa.

O si tiene poco tiempo, compile su .lib en un .dll y use JNA :-)

Otros consejos

Siempre puede crear un proyecto de DLL (biblioteca dinámica) que llame directamente a su biblioteca estática, y luego puede usar JNA con la nueva DLL creada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top