java使用动态链接库

java可以使用native关键字调用第三方库,现在我们简单使用当前两种操作系统的库编写第三方接口来支持java调用

  1. 先定义好java的对应接口
package chingee.test.dll;public class HelloWorld {public native void sayHello();}
  1. 使用java命令生成对应接口的Java native inteface,也就是C语言中的头文件
javah -d jni -classpath target/classes -jni chingee.test.dll.HelloWorld

会在jni目录下生成chingee_test_dll_HelloWorld.h,内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class chingee_test_dll_HelloWorld */#ifndef _Included_chingee_test_dll_HelloWorld
#define _Included_chingee_test_dll_HelloWorld
#ifdef __cplusplus
extern "C" {#endif
/** Class:     chingee_test_dll_HelloWorld* Method:    sayHello* Signature: ()V*/
JNIEXPORT void JNICALL Java_chingee_test_dll_HelloWorld_sayHello(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif

适用于windows的DLL

  1. 使用VS创建一个动态链接库项目
  2. 将上面生成的头文件chingee_test_dll_HelloWorld.h放到项目的根目录下,并将JDK中的jni.h(JAVA_HOME/include)和jni_md.h(JAVA_HOME/include/win32)也放到根目录下
  3. 修改chingee_test_dll_HelloWorld.h的引用
// #include <jni.h>
#include "jni.h"
  1. 创建HelloWorld.cpp
#include "pch.h"
#include "HelloWorld.h"
#include "chingee_test_dll_HelloWorld.h"JNIEXPORT void JNICALL Java_chingee_test_dll_HelloWorld_sayHello
(JNIEnv*, jobject)
{printf("Hello World!");// 输出 Hello World
}
  1. 生成dll动态库
  2. 在项目HelloWorld/x64/Debug可以查看对应文件

适用于linux的SO

TODO

java使用动态库

  1. 可以将HelloWorld.dll放到java.library.path,java运行时就可以直接使用
  2. 在代码中热加载HelloWorld.dll
package chingee.test.dll;import java.io.File;
import java.io.IOException;/*** Hello world!**/
public class App {public static void main(String[] args) throws IOException {File directory = new File("");directory = directory.getCanonicalFile();directory = new File(directory.getParentFile().getParentFile(), "c++\\HelloWorld\\x64\\Debug\\HelloWorld.dll");// 1. 直接加载动态链接库System.load(directory.getAbsolutePath());// 2. 加载java.library.path中的文件名为Testdll的动态链接库// System.loadLibrary("Testdll");HelloWorld helloWorld = new HelloWorld();helloWorld.sayHello();}
}

java使用动态链接库相关推荐

  1. java 调用动态链接库_JAVA技巧:JNative调用动态链接库问题(SOS)

    动态链接库的方法如下:__declspec(dllexport) ret __stdcall rLachTran(const char *pc_trancode, const char *pc_cli ...

  2. JAVA调用动态链接库

    上一篇<JAVA本地接口(JNI)>中介绍了JAVA的JNI技术,通过JAVA自有的方式调用动态链接库,这一篇将继续为大家介绍使用其他方式调用动态链接库. 首先,我们编写一个用于测试的链接 ...

  3. Java调用动态链接库读取RFID

    1.java要读取动态连接库,首先要有库文件,即dll文件,jdk中自带的有一部分dll文件,但是大部分情况下我们都是调用自己的库文件,这个时候就要把dll文件加载到java.library.path ...

  4. java中被遗忘的native关键字

    我是无意间看见JNI( java调用动态链接库dll )这块的东西. 所有记下来:本地声明方法  装载完成dll文件后,将使用的方法用native关键字声明. public native static ...

  5. java jni调用dll_浅谈JNI的使用--java调用dll(原创)

    什么是JNI?Java Native Interface(Java本地接口)的简写.使用这个接口,可以轻松实现java对动态链接库Dynamic Link Library(dll)文件的调用,以实现一 ...

  6. Java Swing/AWT和GTK混合GUI编程

    首先用C语言的GTK生成动态链接库,然后利用java的native方法调用该动态链接库就可以了,是不是很简单. 环境: JDK 8: OS:CentOS5: GTK:gtk+-2.0 首先看下我的文件 ...

  7. JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)

    现在流行的搜索引擎 Lucene, Elasticsearch处理文件搜索时一般使用 tika,使用tika 处理文件正文搜索还好,但搜索结果显示正文等操作不是很方便,并且tika提取正文的速度比较慢 ...

  8. 用java实现网络爬虫,实时获取中国地震台网数据

    用java实现网络爬虫,实时获取中国地震台网数据 1.如何从网络中爬取相关数据 2.怎么进行数据处理 3.绘图设计 4. 存在问题: 5.java程序的源文件 5.1 爬虫程序 5.2 绘制柱状图程序 ...

  9. java 多媒体_Java播放多媒体

    Java对多媒体文件的支持很差,自带的库只能播放 .mp3 等有限的几种格式的文件,连 .wma 都不支持.所以,要想用 Java 播放几种常见的多媒体文件,就得救助外部的第三方库. 目前用Java播 ...

最新文章

  1. 开启报名 | 青源 Salon 第 1 期:强化学习专场,报告,海报,激辩,这是年轻人的会场
  2. js各种方法继承以及优缺点
  3. java8使用stream操作集合类,如何使用bigDicemal计算工资?
  4. androidpn的学习研究(八)androidpn 中业务类XmppIoHandler实现分析
  5. SaaS:新智能背景下重构各个领域的生态系统
  6. [转载] Python numpy insert()、 delete()、append()函数的用法
  7. protobuf java学习
  8. k-d Tree及其Java实现
  9. UDS常用诊断服务介绍
  10. Java连接db2数据库(常用数据库连接五)
  11. ThreadX内核源码分析 - 事件
  12. ARCGIS Pro试用申请教程以及登录页面脚本错误解决办法
  13. 网易的java开发_网易微专业java开发工程师2021
  14. 涅普计划-web入门简介笔记
  15. MIUI黑科技之小米直达服务:Web 般的流畅体验+更少的卡顿、延迟
  16. 35岁以上的那些测试员何去何从?
  17. 微信支付找不到sdk
  18. js 数组(定义数组,数组长度,数组计算,元素类型转换)
  19. 智能化CSS检测法,好优化拒绝冗杂代码
  20. DELL XPS 15 9570 LA-G341P DDP00/DDB00 REV 1.0(A00)笔记本点位图

热门文章

  1. 集线器、网桥、交换机、路由器区别的简单讲解
  2. 从表单驱动到模型驱动,解读低代码开发平台的发展趋势
  3. PLSQL远程连接数据库
  4. 项目经理工作全清单,从签合同到竣工,建议收藏
  5. 判断链表是否有环(集合快慢指针)
  6. 讲解一下上网行为管理的作用
  7. 转:尹一丁:创新,别忽视领导者与员工们的直觉
  8. Sharelist免服务器挂载天翼云 本地+局域网+公网
  9. 软件测试工程师 面试100题
  10. Python_Four