如果没有dll的源码,java能够通过jni访问已有的dll吗?如果能,该这样调用呢? 

解决方案 »

  1.   

    可能需要你对已有的dll进行适度封装。
    举个例子,已知dll为A.dll, 它里边已经export,可被调用的API为int inc(int a);
    这时你不能直接在java中调用这个方法
    class T
    {
        public T();
        private native int tInc(int a);
        public int inc(int a)
        {
            return tInc(a);
        }
    }使用javah编译以后,会生成T对应的c头文件,
    然后你在那个文件对应实现文件当中,在tInc对应的函数实现体中,调用A.dll的API inc(int a)就可以了。
    思路就是这样。
    就是说,需要一个wrapper,在wrapper里调用dll.