首页 > 编程语言 >Java调用C++动态链接库——Jni

Java调用C++动态链接库——Jni

时间:2022-09-06 17:34:16浏览次数:98  
标签:调用 头文件 C++ 生成 动态链接库 Java Jni

最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用。就去了解了下Jni。使用起来还是比较方便的。

1.  首先编写Java的调用类。例如:

  

public class TestJni(){
    static{
        System.loadLibrary("TestJinDll");                            //这个名字随便起,跟C++生成的DLL对应就行
    }
    
    public  static native String callFun(String paramStr);           //具体的调用方法。
}

2.  导出这个类的.h文件,也就是头文件。可以用命令行生成也可以通过IDEA编辑个工具,这样以后修改直接生成就可以了。就是这样:

使用的时候就 文件上右键--> external tools-->javah.就可以了。这时就生成了一个头文件。类似于这样⬇️:

这里边的东西不要改。

3.  建立一个C++工程。选动态链接库类型的。将这个头文件复制过去 。同时还有 两个头文件分别是jni.h和jni_md.h,这两个文件在jdk安装目录下include文件下和include/win32下,全部 复制到C++工程。然后就是实现了,将头文件中的方法声明原封不动的copy到源文件 中去实现就可以了。然后就可以生成动态 链接库了 。

参数的类型jstring,只是Java到C++的中间类型。其他的类型也都可以。我这里传个json串过去,在C++中解析成类就好了 。

json串的解析可以使用 rapidjson。 github大神封装的AIGCJson很好用,传送门

4. 生成的链接库复制到Java工程的根目录下。调用就好了。 String res = TestJni.callFun(param);

 

标签:调用,头文件,C++,生成,动态链接库,Java,Jni
From: https://www.cnblogs.com/lostO/p/16662576.html

相关文章

  • Java连接数据库进行操作
    importjava.sql.*;importjava.util.ResourceBundle;publicclassJBDCTEST{publicstaticvoidmain(String[]args){Connectionc=null;St......
  • java程序运行机制
    java程序运行机制编译型相当于有一个负责翻译的程序(编译器),将代码转换成计算机可执行的代码。执行速度快,对操作系统要求较低C/C++.java通过java编译器变为.class......
  • java邮件开发详解(一)
     地址:https://www.cnblogs.com/h--d/p/6138810.htmlJavaMail介绍 JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支......
  • 【Java基础】方法重写Override
    1.什么是方法重写子类对父类中同名同参数的方法进行重写覆盖。publicclassPerson{publicvoidsay(){System.out.println("父类中的方法");}}......
  • Java-
    基本数据类型:1基本类型:byte二进制位数:8一个字节8个bit位2包装类:java.lang.Byte3最小值:Byte.MIN_VALUE=-1284最大值:Byte.MAX_VALUE=127 1基本类型:short......
  • java复习随笔(十三)——Stream流
    Stream流的生成方式Stream流的使用生成流通过数据源(集合,数组)生成流list.stream()中间操作一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的......
  • 肖sir__java__图集
    (1)修饰符Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:访问控制修饰符:default,public,protected,private非访问控制修饰符:final,abstract,sta......
  • java List排序
    2.1新建Comparator比较器List<Person>list=newArrayList<Person>(){};Collections.sort(list,newPersonComparator());classPersonComparatorimplements......
  • 金九银十,收下这份 Java String 面试题
    请点赞关注,你的支持对我意义重大。......
  • 力扣636(java)-函数的独占时间(中等)
    题目:有一个单线程CPU正在运行一个含有n道函数的程序。每道函数都有一个位于 0和n-1之间的唯一标识符。函数调用存储在一个调用栈上:当一个函数调用开始时,它......