java连接c++动态库并生成jar包提供给别人调用

1、需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承

 在项目的src目录执行,否则会提示 错误:找不到符号

javac -encoding utf8 D:\project\DeviceDemo\src\com\javaCallDll\DemoController.java

javah -jni  com.javaCallDemo.DemoController

2、c++是多线程回调,需要将当前线程注册到虚拟机中用到AttachCurrentThread

void TabletRemoteContollerRbtAdapter::onDeviceMac(rbt_win_context* context, const char* pMac) {JNIEnv* pEnv;gs_jvm->AttachCurrentThread((void **)&pEnv, NULL);if (!pEnv) {std::cout << "pEnv == null" << std::endl;return;}jclass jClassTmp = pEnv->GetObjectClass(_correspondJavaClassInstance);_onDeviceMacMethodID = pEnv->GetMethodID(jClassTmp, "onDeviceMac", "(Ljava/lang/String;)V");if (!_onDeviceMacMethodID) {std::cout << "_onDeviceMacMethodID is nullptr" << std::endl;return;}jstring jMac = CStrToJStr(pEnv, pMac);pEnv->CallVoidMethod(_correspondJavaClassInstance, _onDeviceMacMethodID, jMac);
}

  

3、在java 写主调函数和回调函数在主调初始化的时候将回调类做为参数传进去

    public static final TabletRemoteController tabletRemoteController = new TabletRemoteController();/*** 初始化接口* @param rbtDataCallBack* @return*/public int init(RbtDataCallBack rbtDataCallBack) {tabletRemoteController.setRbtDataCallBack(rbtDataCallBack);int res= tabletRemoteController.init();return res;}

  

  public class TabletRemoteController {static {System.loadLibrary("device");System.loadLibrary("ControllerAdapter");}private RbtDataCallBack rbtDataCallBack;public void setRbtDataCallBack(RbtDataCallBack rbtDataCallBack) {this.rbtDataCallBack = rbtDataCallBack;}public void onOriginData(String mac, int s, int x, int y, int p, byte[] buffer, int len) {rbtDataCallBack.onOriginData(mac, s, x, y, p, buffer, len);}

  

4、将c++动态库回调数据进行处理的可以继承回调类接口

public interface RbtDataCallBack {void onOriginData(String mac, int s, int x, int y, int p, byte[] buffer, int len);void onDeviceMac(String mac);
}

  

public class SampleCode {public static void main(String[] args) {RbtDeviceWifi rbtDeviceWifi = new RbtDeviceWifi();rbtDeviceWifi.init(new RbtDataCallBack() {@Overridepublic void onOriginData(String mac, int s, int x, int y, int p, byte[] buffer, int len) {System.out.println("mac=" + mac + " s=" + s + " x=" + x + " y=" + y + " p=" + p + " byte=" + buffer + " len=" + len);}

  

5、将项目进行打包并提供动态库给客户

打开project Structure 选择+号 进行

转载于:https://www.cnblogs.com/ampl/p/10188822.html

java 调用动态库打包sdk相关推荐

  1. java动态打包_java 调用动态库打包sdk

    java连接c++动态库并生成jar包提供给别人调用 1.需要将java通过jni生成头文件,并导入到c++项目并对c++进行jni方法继承 在项目的src目录执行,否则会提示 错误:找不到符号 ja ...

  2. 利用JNative实现Java调用动态库

    由于项目要求,需要用Java调用windows的dll文件,查了一下,如果用JNI的话是比较麻烦的,在sourceforge.net上搜索了一下 "Java dll",首先出现的是 ...

  3. Java调用动态库 缺点,Java调用动态库所需要关心的有关问题

    Java调用动态库所需要关心的问题 标签: 无标签 利用JNative实现Java调用动态库(转) http://cctv663.blog.163.com/blog/static/1011921220 ...

  4. Java调用动态库(转载)

    记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码.比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 M ...

  5. Java调用动态库 缺点_java调用动态库(dll)的一些问题

    javac 1)dos切换到java文件所在目录,使用javac编译出class文件 javah的一些问题: 1)切换到src目录下 2)设置路径命令:set classpath=src目录的完全路径 ...

  6. Window10手把手带你YOLOV5的火焰烟雾检测+tensorrt量化加速+C++动态库打包

    目录 0.引言 1.yolov5模型训练 1.2 模型训练 1.3 模型测试 2 模型转换 2.1 pt→wts→engine 2.1.1 pt转wts 2.1.2 wts转engine 3 动态库打 ...

  7. Linux下使用Java调用Hikvision设备网络SDK使用指南

    1 简介  由于在开发过程中,本来以为抓图项目会部署在Windows服务器上,但随着项目的进行发现项目需要部署在Linux系统,甚至是国产化平台银河麒麟上,但在部署时发现在国产化平台部署时出现缺包的问 ...

  8. 【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )

    文章目录 I . FFMPEG 交叉编译后的函数库及头文件 II . FFMPEG 静态库打包动态库 ( 仅做参考 ) III . 创建 Android Studio 工程 IV . FFMPEG 头 ...

  9. Node.js使用ffi-napi,ref-array-napi,ref-struct-napi调用动态库

    0x01 概述 使用electron开进行桌面程序的开发,似乎成了WEB前端开发人员转桌面程序开发的首选.近期有一些使用在electron中使用加密锁的需求,学习了一下在Node.js中通过ffi-n ...

最新文章

  1. 大年初四,你认为在南方过年和在北方过年最大的不同是什么?
  2. Python的DataFrame多个条件过滤错误
  3. QT MSVC 中文报错
  4. 程序员开发利器:源代码管理的十条建议
  5. OpenCV消除傅立叶域中的周期性噪声的实例(附完整代码)
  6. .net读写配置文件
  7. Flask和mysql多线程_数据库连接池Flask-SQLAlchemy中多线程安全的问题
  8. mysql云上迁移_自建mysql 迁移到云上-问答-阿里云开发者社区-阿里云
  9. 给定一个整数序列,求中位数
  10. 一次vue-cli 2.x项目打包优化经历(优化xlsx插件)
  11. java中random方法取值范围_java中最值的求法,你可能忽略了这种方法了!
  12. [原创]Linux下网络性能测试Netperf工具介绍及安装
  13. spark学习 小汇集
  14. python自动化运维平台下载_5、python自动化运维——集中化管理平台Ansible
  15. java各版本之间的差异_Java 8-13版本功能差异一览指南 - marcobehler
  16. xp系统计算机无法用搜索功能,XP系统搜索功能无法使用的六种解决方法
  17. 登陆服务器老出现“达到最大连接数解决方法
  18. 设计模式-word版
  19. python南宁培训
  20. CSP-J1 CSP-S2第1轮 初赛资料集(2022.09.09)

热门文章

  1. Linux系统安装Anaconda3
  2. iPhone各尺寸 app界面设计尺寸规范
  3. 理财笔记 - 长期持有
  4. RabbitMQ介绍以及五种工作模式
  5. html鼠标样式怎么去掉,CSS鼠标样式cursor属性怎么设置
  6. 10种黑客类型,你知道几种?
  7. MySQL 查询指定时间范围内的数据
  8. 笔记之软件测试之道(茹炳晟)03-如何设计一个 “好的”测试用例
  9. supesite 标签语法
  10. 《所谓情商高,就是会说话》读书笔记(一)——让人舒服