Programación General > Visual C++
Generación De Librería Dinámica Dll
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
[#] Página Siguiente
Ir a la versión completa