• Viernes 1 de Noviembre de 2024, 10:40

Autor Tema:  Generación De Librería Dinámica Dll  (Leído 4257 veces)

txalupa

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Generación De Librería Dinámica Dll
« en: Lunes 10 de Diciembre de 2007, 15:29 »
0
Hola,
Escribo para pedir ayuda: tengo que generar una librería .DLL en Visual C++
Esta librería debe de llamar a los procedimientos de otra librería estática (.LIB)escrita también en C.

La nueva librería .DLL la voy a utilizar a través de un método nativo en JAVA. Ya tengo escrito dicho método nativo: tengo el fichero .java, también el .class y el .h

¿Alguien podría echarme una mano y detallarme los pasos que tengo que dar en Visual C++ para conseguir dicha DLL?

Tengo serias dudas en cómo indicarle el enlace de la librería .LIB que tengo que utilizar.
¿Tengo que indicar de alguna manera los ficheros jni.h y jni_md.h?

Necesito solucionar esto cuanto antes. Estoy bastante atascado en el proyecto.

Muchas gracias por vuestra ayuda.

Txalupa.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Generación De Librería Dinámica Dll
« Respuesta #1 en: Miércoles 12 de Diciembre de 2007, 11:47 »
0
si usando visual c++ le das a crear nuevo proyecto Win32 y le das a generar DLL dinamica, practicamente solo tienes que leerte el proyecto que genera en el que te explica como hacer casi todo, para enlazar la libreria estatica vale con hacer

#pragma comment (lib,"nombrelibreria.lib");

si los necesitas para usar la lib, si, tendras que incluir los headers esos.

LauraDiaz

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Generación De Librería Dinámica Dll
« Respuesta #2 en: Miércoles 12 de Diciembre de 2007, 12:03 »
0
hola,
una vez creado el proyecto en Visual C++ para crear una DLL, en Tools->Options->Directories puedes añadir los directorios "INCLUDE" de tu instalación JDK para que pueda acceder a los jni.h y demás.
Para poder llamar a los métodos de la libreria estática, yo simplemente he añadido en Project->Add to Project ->Files el .lib que me interesa y el fichero .h generado por el javah de java.

suerte,
Laura

txalupa

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Generación De Librería Dinámica Dll
« Respuesta #3 en: Miércoles 12 de Diciembre de 2007, 12:41 »
0
Hola,
muchas gracias por vuestra ayuda.
Ya he conseguido generar la dll y además ejecutar mi programa java con código nativo.

Txalupa.

LauraDiaz

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Generación De Librería Dinámica Dll
« Respuesta #4 en: Miércoles 19 de Diciembre de 2007, 10:05 »
0
Hola Txalupa,
tengo una pregunta, has enlazado tu proyecto con una DLL en fortran o estaticamente con el .LIB?

Yo lo he enlazado estaticamente con el .LIB y me ha linkado bien y me genera la DLL en  C++, sin embargo cuando ejecuto mi código mi programa java me dice que no encuentra la dll de fortran, si no esta disponible en el path?
sabes a que puede ser debido?

Además si añado la DLL al path y ejecuto mi DLL de C++, cuando intento llamar una rutina de fortran con una parametro String, me salta todo el tiempo un error de ACCESS _VIOLATION. Mi código en C++ es el siguiente:
Código: Text
  1.  
  2. // HBVMODELAPI.cpp : Defines the entry point for the DLL application.
  3. //
  4. #include "stdafx.h"
  5. #include "edu_uji_aware_hbv_HBVModel.h"
  6.  
  7. extern "C"
  8. {
  9.  void _imp_test(char*, int);
  10.  #define test _imp_test
  11. };
  12.  
  13. JNIEXPORT void JNICALL Java_edu_uji_aware_hbv_HBVModel_hbv
  14.   (JNIEnv *env, jobject obj, jintArray flag, jfloat ages)
  15. {
  16. //just testing
  17.   char szCtest[20];
  18.   strcpy(szCtest,"teststring");
  19.   test(szCtest, strlen(szCtest));
  20. }
  21.  
  22.  
y el código fortran
Código: Text
  1.  
  2. subroutine test(ins,sze)
  3.  
  4.   !DEC$ ATTRIBUTES DLLEXPORT :: test
  5.   !DEC$ ATTRIBUTES ALIAS:'test' :: test
  6.   !DEC$ ATTRIBUTES STDCALL :: test
  7.   !DEC$ ATTRIBUTES REFERENCE :: ins,sze
  8.  
  9.   character*256 ins
  10.   integer*4 sze
  11.   CHARACTER*256 out_strng
  12.          out_strng(1:sze) = ins
  13.          
  14. end subroutine
  15.  
  16.  

alguna idea??

gracias y un saludo!

raistlin_

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Generación De Librería Dinámica Dll
« Respuesta #5 en: Miércoles 26 de Diciembre de 2007, 12:34 »
0
WEnas! Y para crear la librería para usar JNI sin usar Visual C++?? Con el compilador gcc yo usaba:

              gcc -shared -o myLib.dll myLib.o

Pero a la hora de llamarla desde la clase java, ésta se keda blokeada y no da errores ni nada. A q puede deberse?? :(  :unsure: