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

 

posted @ 2015-03-25 14:09  洗浄  阅读(3562)  评论(0编辑  收藏  举报