jni java编程(JNI经典接口使用书籍教程)
1,什么是JNI。
JNI是Java Native Interface的缩写,通过使用Java本地接口书写程序,可以确保代码在不同的平台上方便移植。
2,编写Java接口。
编写如下测试代码。通过C++编译的DLL计算两个数字相加,得到结果。
package com.opencv.test;
public class JniTest{
public static native int JNI_ADD(int a,int b);
}
先编译以上代码,在生成class的文件夹里执行命令:
【javah-class[项目所在目录][包名.类名]】如下:
javah-classpath E:\zbxt\mytest\src\main\java com.opencv.test.JniTest
执行完后会在目录下生成一个.h文件[com_opencv_test_JniTest.h]。
4、编写DLL程序。
打开VS新建项目选择Win32项目。
确认后点击下一步应用类型选择DLL。
完成后生成如下项目文件。
复制jdk下的JNI依赖头文件文件[jni.h][jni_md.h]到vs工程目录下。
(注:jni.h在jdk的include目录下,jni_md.h在jdk的include\win32目录下)
在复制编译class生成的[com_opencv_test_JniTest.h]头文件到vs工程目录下,
在VS资源管理器里右键头文件-添加-现有项--找到复制在工程目录下的三个头文件。
添加完成后如上图所示
打开com_opencv_test_JniTest.h头文件把#include<jni.h>改成#include"jni.h"。
打开项目自动生成的源程序cpp代码[testJavaDll.cpp]引入头文件[com_opencv_test_JniTest.h]。复制[com_opencv_test_JniTest.h]头文件里的java接口生成的[
Java_com_opencv_test_JniTest_JNI_1ADD]接口函数,粘贴到项目自动生成的源程序cpp代码[testJavaDll.cpp]中,并在其中修改函数如下图所示。
到这里dll已经写好,接下来点击生成-->生成解决方案,提示以下成功信息就代表dll编译成功。
可以看到dll生成的位置:
5、java调用dll进行测试。
加载DLL方式一:把DLL放在JDK的安装目录的jre/bin目录下如:[c:\jdk1.8.0_202\jre\bin]。
加载DLL方式二:在把DLL放在项目的resources目录下,为了区分新建一个lib目录,如图所示。
在打开Project structure--libraries-点击加号--选择java把resources/lib目录添加进去,
再点击modules勾选lib。
编写以下代码验证DLL。
package com.opencv.test;
public class JniTest{
public static native int JNI_ADD(int a,int b);
static{
System.loadLibrary("testJavaDll");
System.out.println("加载dll成功");
}
public static void main(String[]args){
int add_result=JNI_ADD(1,2);
System.out.println("计算结果:"+add_result);
}
}
运行结果
免责声明:本文由用户上传,如有侵权请联系删除!