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

打印 上一主题 下一主题

主题 884|帖子 884|积分 2652

最近项目需要,将C++的算法工程编译成动态链接库,交给 Java后台当作函数库调用。就去了解了下Jni。使用起来还是比较方便的。
1.  首先编写Java的调用类。例如:
  
  1. public class TestJni(){
  2.     static{
  3.         System.loadLibrary("TestJinDll");                            //这个名字随便起,跟C++生成的DLL对应就行
  4.     }
  5.    
  6.     public  static native String callFun(String paramStr);           //具体的调用方法。
  7. }
复制代码
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);
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

惊落一身雪

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表