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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM