Programación General > Visual C++

 Generación De Librería Dinámica Dll

(1/2) > >>

txalupa:
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:
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:
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:
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:
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 --- // HBVMODELAPI.cpp : Defines the entry point for the DLL application.//#include "stdafx.h"#include "edu_uji_aware_hbv_HBVModel.h" extern "C"{ void _imp_test(char*, int); #define test _imp_test}; JNIEXPORT void JNICALL Java_edu_uji_aware_hbv_HBVModel_hbv  (JNIEnv *env, jobject obj, jintArray flag, jfloat ages){//just testing  char szCtest[20];  strcpy(szCtest,"teststring");  test(szCtest, strlen(szCtest));}  y el código fortran

--- Código: Text --- subroutine test(ins,sze)   !DEC$ ATTRIBUTES DLLEXPORT :: test  !DEC$ ATTRIBUTES ALIAS:'test' :: test  !DEC$ ATTRIBUTES STDCALL :: test  !DEC$ ATTRIBUTES REFERENCE :: ins,sze   character*256 ins  integer*4 sze  CHARACTER*256 out_strng         out_strng(1:sze) = ins         end subroutine  
alguna idea??

gracias y un saludo!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa