简单介绍及应用如下:
一、JAVA中所需要做的工作
在JAVA程序中,首先需要在类中声明所调用的库名称,如下:
static {
System.loadLibrary(“goodluck”)
}
在这里,库的扩展名字可以不用写出来,究竟是DLL还是SO,由系统自己判断。
还需要对将要调用的方法做本地声明,关键字为native。并且只需要声明,而不需要具 体实现。如下:
public native static void set(int i)
public native static int get()
然后编译该JAVA程序文件,生成CLASS,再用JAVAH命令,JNI就会生成C/C++的头文件。
例如程序testdll.java,内容为:
public class testdll
{
static
{
System.loadLibrary("goodluck")
}
public native static int get()
public native static void set(int i)
public static void main(String[] args)
{
testdll test = new testdll()
test.set(10)
System.out.println(test.get())
}
}
用javac testdll.java编译它,会生成testdll.class。
再用javah testdll,则会在当前目录下生成testdll.h文件,这个文件需要被C/C++程序调用来生成所需的库文件。
java调用dll文件有两个函数,分别为System.load 和 System.loadLibrary。如果在调用时出现Unable to load library的错误,可以通过下面的步骤进行解决:
1、使用System.load时需要输入文件的全路径,比如:
System.load(“D:\\eclipse\\test.dll”)如果使用该函数报错,首先需要检查路径是否写全写对,然后到指定的路径检查文件是否存在,有没有被隐藏或者加密;
2、使用System.loadlibrary函数时,应用会在系统的library的目录中寻找符合条件的库文件,在window系统下,需要将需要加载的库文件(.dll)放在JDK安装目录下的include目录下,在linux系统下一般是放到/usr/lib目录下。
也可以使用-Djava.library.path=[path]参数,来指定Java程序加载库文件的路径。
3、在window中,最好使用Windows的C/C++编译器生成dll文件,否则调用会有一些问题。
java调用dll要用到jni(java本地接口)
例如程序TestDll.java,内容为:
public class TestDll{
static
{
System.loadLibrary("xxx.dll")
}
public native static int get()
public native static void set(int i)
public static void main(String[] args)
{
TestDll test = new TestDll()
test.set(10)
System.out.println(test.get())
}
}
这个例子只是为了示意jni如何用,并不是实际的工程代码。
你可以搜索一下jni的详细信息,通常都有详细的例子(如使用user32.dll的例子)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)