JAVA通过JNI调用VC的DLL

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程序里调用的方法相同。

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓