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() {

@Override

public 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 选择+号 进行

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

  1. java library jna_Java JNA 调用dll库

    JNA JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JN ...

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

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

  3. java常量配置_java项目动态配置常量和peiconfig.properties配置使用详解

    java项目动态配置常量和peiconfig.properties配置使用详解 点击:2 Java工程中配置信息一般都写在 properties文件中,下面这篇文章是对java基础配置的一点学习心得整 ...

  4. java如何实现动态时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  5. java数字时钟_Java实现动态数字时钟

    本文实例为大家分享了Java实现动态数字时钟的具体代码,供大家参考,具体内容如下 构建: Clock继承 JFrame 为运行页面 ClockText 测试类 创建 Clock 对象 运行效果: 具体 ...

  6. java动态录音_java实现动态录音,声卡有声音进来就自动录音

    TargetDataLine是声音的输入(麦克风),而SourceDataLine是输出(音响,耳机). 整个过程,请参见下面的程序.(运行后,实时地从麦克风录音,实时输出). import java ...

  7. java dll 乱码_java调用c++ dll出现中文乱码 | 学步园

    最近的开发用到了使用java调用本机动态连接库的功能,将文件路径通过java调用C++代码对文件进行操作.在调用中如果路径中包含有中文字符就会出现问题,程序运行就会中止.下面用一个小例子,来说明记录下 ...

  8. 虹软java接摄像头_Java调用虹软SDK的错误

    虹软官网:https://www.arcsoft.com.cn/ 在用Java调用虹软SDK的时候需要注意的问题: 1.SDK版本 虹软的sdk分为LinuxX64.WindowsX86.Window ...

  9. java sql函数_Java调用Sql存储过程实例讲解

    1.使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转 义序列.不带参数的 call 转义序列的语法如下所示: {call procedure-n ...

最新文章

  1. eva每一集片尾曲是谁唱的_【跪求】EVA 18集片尾曲的歌手名,考验大家的听力~...
  2. 计算机安装调试的专业名称,【注意】计算机安装调试维修员国家职业标准
  3. Eclipse安装STS(Spring Tool Suite (STS) for Eclipse)插件
  4. 如何制作U盘启动菜单
  5. mybatis使用全注解的方式案例(包含一对多关系映射)
  6. NGUI_2.6.3_系列教程六(序列帧动画)
  7. c语言程序机试题及答案,C语言程序设计试题及答案解析(二)
  8. Silverlight读取Zip文件中的图片与视频
  9. 卸载软件 Geek Uninstaller
  10. CnPack Pascal 代码格式化工具测试版
  11. transition使用
  12. NLS_LANG详解
  13. 公寓宽带服务器无响应,利用RLDP协议解决网络环路故障
  14. Java控制手机在同一网下_安卓手机控制另一手机的方法【详解】
  15. nginx: worker process is shutting down
  16. 科研人必备英语改写神器——PARAPHRASER多语言改写
  17. Excel数据导出图片
  18. C++ QT开发人机象棋(搜索算法)
  19. ubuntu如何杀进程_ubuntu查看并杀死进程
  20. 在线FLV播放器实现

热门文章

  1. python+selenium 刷简书浏览量 简书流量
  2. 微功耗、低噪声、低温漂、精密电压基准源替代 AD580 AD780 ADR03 ADR431ADR433 ADR443 REF193 REF5030
  3. IEEE文献免费下载
  4. oracle的start with connect by prior如何使用
  5. 通过openssl生成pfx证书
  6. Android界面(一)——QQ空间说说界面
  7. 实时渲染:Tone Mapping 色调映射
  8. 流媒体通信开发系列索引 -- SIP 电话项目实战系列
  9. CMake+mingw----无法找到gcc/g++问题
  10. Typescript No definition found