JNI(Java Native Interface)是JDK的一部分,用于为Java提供一个本地代码的接口。通过使用JNI编写的程序能够确保你的代码能够完全的移植到所有的平台。JNI使得运行在JVM虚拟机上的Java代码能够操作使用其它语言编写的应用程序和库,比如C/C++以及汇编语言等。此外JNI提供的某些API还允许你把JVM嵌入到本地应用程序中。
JAVA程序要通过System.loadLibrary()调用本地DLL,JAVA程序写法如下:
package testJNI.test;
public class TestDLL {
static{
System.loadLibrary("TESTDLL");
}
public native static int testOutput(int iPort, int iBit);
}
DLL文件名要为TESTDLL.DLL,并且定义了一个本地方法int testOutput(int iPort, int iBit);
先用javac将java文件编译为class,然后用javah TestDLL生成一个.H的头文件。这个头文件就包括了
JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL _testOutput
(JNIEnv *, jclass,jint,jint);
这个是testOutput方法的C++定义,把这个.H的头文件加入到VC++编写的DLL程序中
JNIEXPORT jint JNICALL Java_testJNI_test_TestDLL _testOutput
(JNIEnv *, jclass, jint iPort, jint iBit)
{
return iPort+iBit;
}
重新编译这个DLL程序,将编译好的DLL文件复制到JDK/bin目录下,如果在tomcat下运行WEB程序时要调用DLL,就要把这个DLL文件同时复制到tomcat/bin目录下,否则程序运行时,有时会报找不到DLL的错误。
在JAVA中在调用这个就很简单了
package testJNI.test;
public class RunTestJNI{
public static void main(String[] args){
TestDLL test = new TestDLL();
System.out.println("Result = "+test.testOutput(10,10));
}
}
程序就会输出20的结果。在web程序里调用的方法相同。