有三个的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

解决方案 »

  1.   

    直接用vc6的向导做一个win32的动态连接库,空的,实现上面4个函数就可以了。不用写def文件。
      

  2.   

    把函数做成倒一个dll中,然后通过jni等来调用
      

  3.   

    天啊,我要疯了
    能够成功调试的dll文件,但是调用时报错java.lang.UnsatisfiedLinkError
    无论放在什么目录下都是白费,哪里出了问题啊??
      

  4.   

    这样试一试吧,把a 的dll实现 java的本地方法,然后 java中需要 家在 a.dll即可。a.dll,最好放到 jre\bin 下,不要放到系统目录下如果你安装了多个java虚拟机,这就麻烦了,有可能出问题。
    \
    java.lang.UnsatisfiedLinkError ,这个错误可以肯定的说,是dll的位置不对。