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 ...
随机推荐
- 如何查看 mysql 的视图?
1.查询表(包括view) mysql> use iips; Database changed mysql> show tables; +------------------------- ...
- mysql 创建用户和授权
https://www.cnblogs.com/sos-blue/p/6852945.html
- SQL create file遇到操作系统错误5拒绝访问
当在sql server 2014创建一个数据库时出现错误:尝试打开或创建物理文件 'G:\Test.mdf' 时,CREATE FILE 遇到操作系统错误 5(拒绝访问). 原因及解决方法如下: 这 ...
- eigen 中四元数、欧拉角、旋转矩阵、旋转向量
一.旋转向量 1.0 初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 1. ...
- oracle备份和还原
用exp命令即可完成,但要看具体的备份方式. 1. 导出一个完整数据库 exp system/manager file=bible_db log=dible_db full=y 2. 导出数据库定义而 ...
- leetcode 239. 滑动窗口最大值(python)
1. 题目描述 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最大值. 示 ...
- 关于db4o的透明激活与激活声明
关于db4o的透明激活与激活声明 有关于透明激活,其介绍可以参看这里:http://www.cnblogs.com/redmoon/archive/2008/02/23/1078619.html 文中 ...
- svn访问版本库时一直提示: please wait while the repository browser is initializing
最近不知道做了什么操作,原来正常的SVN Check In/Out都无法正常操作. 正常Check In的动作,几秒钟就会操作完成,但是我却等了好久好久,然后提示Connection timed ou ...
- netcore 使用redis session 分布式共享
首先准备redis服务器(docker 和redis3.0内置的哨兵进行高可用设置) 网站配置Redis作为存储session的介质(配置文件这些略).然后可以了解一下MachineKey这个东西.( ...
- Service-Oriented Architecture,SOA(转)
http://blog.csdn.net/WOOSHN/article/details/8036910 介绍: IT体系结构已非常成熟,它是一种成功处理典型IT问题的方法.体系结构中一个受到很大重视且 ...