3、Java调用C语言(JNA法)

本文介绍如何使用Java Native Access (JNA) 库在Java中调用C语言编写的函数,包括加法运算、数组加法及字符串处理等示例,并提供了从创建Java接口到编译C代码生成DLL文件的全过程。

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

 

转载于:https://www.cnblogs.com/xianwen/p/4365551.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值