3、Java调用C语言(JNA法)
这个方法挺方便的……(改写“二、Java调用C语言(JNative法)“的例子)
一、访问https://github.com/twall/jna ,下载jna-4.1.0.jar(版本不同名字不同),把它放在你jdk下的\jre\lib\ext目录下
二、在 F:\MinGW\Jna新建 Test.java:
import com.sun.jna.Native;
public class Test {
public static void main(String[] args) {
Lib lib = (Lib) Native.loadLibrary("test", Lib.class);
// 例1
int re1 = lib.add(11, 9);
System.out.println("例1:addresult = "+re1);
// 例2
int len=3;
int[] a = {11, 18, 21};
int[] b = {44, 56, 100};
int[] c = new int[3];
lib.addArray(a, b, c, len);
for (int i = 0; i < len; i++) {
System.out.println("例2:addArray"+(i+1)+" = "+c[i]);
}
// 例3
String inputString = "kun";
String outputString = lib.stringFun(inputString);
System.out.println("例3:outputString = "+outputString);
}
}
三、再新建一个 Lib.java:
import com.sun.jna.Library;
public interface Lib extends Library {
int add(int a, int b);
void addArray(int[] a, int[] b, int[] c,int len);
String stringFun(String str1);
}
四、再新建一个 test.c:
#include <stdio.h>
#include <malloc.h>
int add(int a, int b) {
return (a + b);
}
void addArray(int *a,int *b,int *c,int len) {
int i;
for(i=0;i<len;i++) {
c[i]=a[i]+b[i];
}
}
char* stringFun(char *str1) {
printf("例3:intputString = %s\n",str1);
char *str2 = (char*)malloc(sizeof(char)*17);
str2 = "HG-U133_Plus_2.0";
return str2;
}
五、生成dll:
方法一:如果安装了MinGW
f:
cd MinGW/Jna
gcc -Wall -shared test.c -o test.dll
javac Test.java
java Test
这时目录下新生成了test.dll、Test.class、Lib.class
效果:
方法二:如果安装了Rtools(注意:我是Win7系统)
f:
cd MinGW/Jna
R CMD SHLIB test.c
javac Test.java
java Test
这时目录下新生成了test.dll、test.o、Test.class、Lib.class
3、Java调用C语言(JNA法)的更多相关文章
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- JAVA调用C语言写的SO文件
JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...
- JAVA 调用 R 语言
1 简介 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的 ...
- Java调用R语言
R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/ ...
- JAVA 调用 R 语言之升华篇
由于项目的需要,最近做了一个javaWeb调用R的组件,在这里,我把自己走的一些弯路给大家总结一下: 一.选取什么插件作为java和R之间的通信? 1. 在传统的方式中,大致可以分为两类:一类是JRI ...
- 2、Java调用C语言(JNative法)
这个方法也是挺麻烦的…… 一.下载JNative.jar,把它放在你jdk下的\jre\lib\ext目录下 二.在 F:\MinGW\JNative 新建 Test.java: public cla ...
- 1、Java调用C语言(本地法)
这是一个比较麻烦的方法.. 一.首先,你要先安装一个VC,我的装在了D:\software\C++\Microsoft Visual Studio 二.我的jdk安装目录是D:\Program ...
- Java如何调用C语言程序,JNI技术
Java为什么要调用C语言编写的程序因为涉及操作系统底层的事件,Java是处理不了的,例如用户上传一个视频文件,需要后台给视频加上水印,或者后台分离视频流和音频流,这个事Java就做不了,只能交给C语 ...
- java调用dll-JNA
介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA . JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JN ...
随机推荐
- Linux 系统磁盘空间占满,df 和 du 结果不一致
服务器运行一段时间后df查看磁盘剩余空间不足,通过du统计发现被几个文件占用,遂删除之.过了一段时间磁盘空间再次不足,通过du统计却找不到那么多大文件.搜索后才得知原因:文件删除后空间没有释放,du统 ...
- QT 问题提问网站
https://stackoverflow.com/questions/tagged/qt
- Scrapy终端(Scrapy shell)
1.介绍文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/topics/shell.html# 2.终端的启用方式:scrapy shell url u ...
- 2-gitblit添加项目,项目成员
创建代码仓库,如下图所示, 然后填个项目的名称和描述即可点击保存. 用户也是,还是相同的位置,点击用户,而不是用户中心,创建用户也是填写用户名称和简称,最后对在旁边有个用户的权限,选择相应的代码仓库即 ...
- vue几种简单的传值方式
除了一下的几种方式外,可以参考 https://www.cnblogs.com/hpx2020/p/10936279.html 组件传值的方法: 一.父组件向子组件传递数据(props) 第1:父组件 ...
- 关于SQL注入的问题以及解决方法
1.关于SQL注入 什么是SQL注入: 由于jdbc程序在执行的过程中sql语句在拼装时使用了由页面传入参数,如果用户恶意传入一些sql中的特殊关键字,会导致sql语句意义发生变化,这种攻击方式就叫做 ...
- 20165218 《网络对抗技术》 Exp8 Web基础
Exp8 Web基础 基础问题回答 (1)什么是表单 表单可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏 ...
- php 判断字符串包含
PHP语言是一个功能强大的嵌入式HTML脚本语言,它的易用性让许多程序员选择使用.PHP判断字符串的包含,可以使用PHP的内置函数 strstr,strpos,stristr直接进行判断.也可以通过e ...
- Redis存储对象序列化和反序列化
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInpu ...
- docker原理(转)
转自:https://zhuanlan.zhihu.com/p/22382728 https://zhuanlan.zhihu.com/p/22403015 在学习docker的过程中,我发现目前do ...