Java 怎么样使用JNI调DLL文件里的方法呢?
比如,已知DLL文件里有OPEN(int ip)等等之类,返回值也知道,那如果通过JAVA来访问或者调用这些方法呢

解决方案 »

  1.   

    网上很多教程,LZ去搜一下吧。。
    http://www.feloo.com/it/info.php?id=207224
      

  2.   

    http://topic.csdn.net/u/20091027/22/90d9fec0-321e-41db-aa33-d76acbc45748.html?80278
    CSDN原贴。LZ可以看看
      

  3.   

    比如我的JAVA代码:public class Java2dll { public  static  native   String   cTrim(String   str);    static{
    System.loadLibrary("java2dll");  
    }

    public   static   void   main(String[]   args)   
      {   
      String   str1="Test";   
      System.out.println("str2="+cTrim(str1));   
      }   }
    我的dll代码
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    #include "Java2dll.h"
    /* Header for class Java2dll */#ifndef _Included_Java2dll
    #define _Included_Java2dll
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     Java2dll
     * Method:    cTrim
     * Signature: (Ljava/lang/String;)Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_Java2dll_cTrim
    (JNIEnv *, jclass, jstring str){
     return str;
    }
    #ifdef __cplusplus
    }
    #endif
    #endif怎么一直报
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Java2dll.cTrim(Ljava/
    lang/String;)Ljava/lang/String;
    错误呢
      

  4.   

    用JNative-1.3.2
    网上有
    很好用的
    也解决的回调函数的问题
    import org.xvolks.jnative.JNative;
    import org.xvolks.jnative.Type;
    import org.xvolks.jnative.exceptions.NativeException;public class TestJNA {
    public static void main(String[] args) {
    try {
    JNative jn = new JNative("calc1.dll", "Calc_Add");
    jn.setRetVal(Type.INT);
    jn.setParameter(0, 12);
    jn.setParameter(1, 254);
    jn.invoke();

    int result = Integer.parseInt(jn.getRetVal());
    System.out.println(result);
    } catch (NativeException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();

    } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    }
      

  5.   

     JNI的使用步骤是:    
        1.编写Java类,用该类将DLL对外提供的函数服务进行声明,其中的Java方法均声明为nat
        ive,其方法签名可以自定义,不用实现函数体。    2.用Javah工具将该Java类生成对应的.h头文件。    
        3.最重要的比较麻烦的一步:编写C/C++代码实现.h头文件中声明的函数,该C/C++代码中
        包含jni.h头文件,并且编写代码时使用其中定义好的数据类型作为函数的输入和返回数
        据类型进行编程。用这种方法实现数据类型转换。例如数据类型:boolean(java) à 
        jboolean(jni.h: typedef unsigned char 
        jboolean),在自己编写的C/C++代码中使用数据类型jboolean映射Java中的boolean类型
        。在该步骤中,可以在C/C++代码中调用已经存在的DLL库。    4.另外编写的Java代码时就可以使用该Java类了。    在第3步中,编写C/C++函数时,可以使用一个叫interface 
        pointer的env指针来调用JNI提供的一系列(很多)函数,用这些函数来访问JVM的对象和数
        据。    使用JNI的缺点:使用比较麻烦,需要对已有的DLL进行封装,需要对C/C++比较了解。    使用JNI的优点:可以跨平台调用本地库。
      

  6.   

    这些我在网上也看过的还是试试JNative-1.3.2 
    看看行不行,老板要求用JNI,郁闷的
      

  7.   

    如何DLL中函数的返回值是HANDLE的时候,怎么设置返回值呢?