java jna 调用c_3、Java调用C语言(JNA法)

本文详细介绍了如何使用Java JNA库调用C语言编写的函数。首先,从官方网站下载并放置jna库文件。接着,创建Java类`Test`和`Lib`,分别用于加载C库和定义接口。在C语言中实现函数,并编译为DLL。最后,通过MinGW或Rtools生成DLL,并运行Java程序进行调用。示例包括加法、数组相加和字符串处理功能。
摘要由CSDN通过智能技术生成

这个方法挺方便的……(改写“二、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

#include

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

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

效果:

3d778d7f6491f03fe76989b545684458.png

方法二:如果安装了Rtools(注意:我是Win7系统)

f:

cd MinGW/Jna

R CMD SHLIB test.c

javac Test.java

java Test

这时目录下新生成了test.dll、test.o、Test.class、Lib.class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值