Java调用C++/C

Java调用C++/C有3中方式:JNI、JNA、JNative。
注:1、个人觉得还是JNA的方式最好。
2、Java和C++/C交互的难点在于数据结构的对应
3、java不可以直接调用C#代码,C#代码需要托管

JNI
(Android调用,普通java类似)使用步骤:
1、编写静态方法(用java声明)
2、编译生成class文件
3、编译生成h文件
4、编写C文件(用C/C++实现)
5、配置NDK
6、配置so库
7、在Activity调用(Java调用C/C++)。
JNative
使用步骤:
1、下载Jnative.jar,下载地址如下:
  http://nchc.dl.sourceforge.net/sourceforge/jnative/JNative.jar
  把JNativeCpp.dll放在c:\windows\system32目录下;把要调用的dll文件也放在c:\windows\system32目录下。
2、编码调用dll,示例如下:

 1. JNative jnative = new
 2   JNative(dllNmae,"disConnect");  //调用a.dll中disconnect方法
 3  jnative.setRetVal(Type.INT);  //设置返回类型为int,也可以设置为float,string等类型 int
 4   pindex = 0; jnative.setParameter(pindex++,
 5   hHandle);  //设置第一个参数为hHandle jnative.invoke();  //正式执行这个函数 return
 6  jnative.getRetValAsInt();  //设置返回值为int,并返回

JNA
使用步骤:
1、下载 jna-x.x.x.jar放入到java项目类路径下;
2、创建一个接口继承Library;
3、声明方法,方法的返回值和参数要和本地dll对应;
4、实例化接口实例;
5、调用接口;

//1、创建接口
public interface CSIInterface extends Library {
     //2、声明方法
     public Boolean CreateCsiInstance(int deviceId, Boolean bSquelchLogging);
}
//3、实例化接口
public CSIInterface instance = (CSIInterface) Native.loadLibrary(
            "macitcsi.dll", CSIInterface.class);
//4、调用接口
instance.CreateCsiInstance(4true;

使用注意点:
1、dll的位数要和JDK的位数一致;
2、Java和C的数据类型对应关系如下,和C++的数据类型可以通过C为中转:
在这里插入图片描述
在这里插入图片描述

3、常用记录:com.sun.jna.Structure对应结构体,com.sun.jna.Callback对应回调。

作者:China第一程序员
链接:https://www.jianshu.com/p/24174203c3d7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值