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