有三个的C++类文件,两个类是别人编写的模块。
另一个类是根据java native interface方法生成的头文件(如下)的实现,以下的函数作为dll提供给java的函数方法调用。
这三个类有阶梯式的调用的关系,即a调用b,b调用c。
请教高手,该怎么封装包括三个类的DLL?查了一些资料,要么是只含有一个类的jni实现的dll;要么是一般的几个类的dll制作,和jni又有些不同,比如编写.def文件时,声明函数是用exports,不是jniexport。
偶是菜鸟,还请详细指明用vc6编写这个dll的步骤,不胜感激;-)
还因为偶是菜鸟,所以信誉之上,呵呵以下是机器生成的头文件,包含需要导出的函数原型:/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jMiddleWare */#ifndef _Included_jMiddleWare
#define _Included_jMiddleWare
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jMiddleWare
* Method: delDupFile
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_jMiddleWare_delDupFile
(JNIEnv *, jobject, jstring, jstring);/*
* Class: jMiddleWare
* Method: isSimilar
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_jMiddleWare_isSimilar
(JNIEnv *, jobject, jstring, jstring);/*
* Class: jMiddleWare
* Method: getCharacter
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jMiddleWare_getCharacter
(JNIEnv *, jobject, jstring);/*
* Class: jMiddleWare
* Method: setSimilarRate
* Signature: (F)V
*/
JNIEXPORT void JNICALL Java_jMiddleWare_setSimilarRate
(JNIEnv *, jobject, jfloat);#ifdef __cplusplus
}
#endif
#endif
另一个类是根据java native interface方法生成的头文件(如下)的实现,以下的函数作为dll提供给java的函数方法调用。
这三个类有阶梯式的调用的关系,即a调用b,b调用c。
请教高手,该怎么封装包括三个类的DLL?查了一些资料,要么是只含有一个类的jni实现的dll;要么是一般的几个类的dll制作,和jni又有些不同,比如编写.def文件时,声明函数是用exports,不是jniexport。
偶是菜鸟,还请详细指明用vc6编写这个dll的步骤,不胜感激;-)
还因为偶是菜鸟,所以信誉之上,呵呵以下是机器生成的头文件,包含需要导出的函数原型:/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class jMiddleWare */#ifndef _Included_jMiddleWare
#define _Included_jMiddleWare
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: jMiddleWare
* Method: delDupFile
* Signature: (Ljava/lang/String;Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_jMiddleWare_delDupFile
(JNIEnv *, jobject, jstring, jstring);/*
* Class: jMiddleWare
* Method: isSimilar
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL Java_jMiddleWare_isSimilar
(JNIEnv *, jobject, jstring, jstring);/*
* Class: jMiddleWare
* Method: getCharacter
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_jMiddleWare_getCharacter
(JNIEnv *, jobject, jstring);/*
* Class: jMiddleWare
* Method: setSimilarRate
* Signature: (F)V
*/
JNIEXPORT void JNICALL Java_jMiddleWare_setSimilarRate
(JNIEnv *, jobject, jfloat);#ifdef __cplusplus
}
#endif
#endif
能够成功调试的dll文件,但是调用时报错java.lang.UnsatisfiedLinkError
无论放在什么目录下都是白费,哪里出了问题啊??
\
java.lang.UnsatisfiedLinkError ,这个错误可以肯定的说,是dll的位置不对。