java调用c语言_Java调用C语言动态库(JNA方式,持续)

过程主要分为以下几个步骤:

1、vs2017编写cpp/h代码,编译成dll,编译成功后,用depends查看库的依赖是否有缺失,也可以自己写个demo,调用这个dll中的函数,是否可以调用成功作为验证这个dll是否ok的方法。

注意:编译这个dll的cpp和h文件时,注意要extern "C",

eg:

cpp:

一定要注意红框的宏,不然会在java调用这个方法时提示:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function

2、将dll加入到jna 的jar包中,一般用好压打开,然后找到对应的目录,比如:java使用的是x64的jdk,dll也必须要是x64的,这个在编译dll时候选择,选择的方式如下:

第一次使用的时候,没有x64,新加一个就好了,具体可以百度怎么新加一个。如果二者不都是x64或者x86,java在使用的时候会提示找不到dll:

java.lang.UnsatisfiedLinkError: Unable to load library 'jndadll': Native library (win32-x86-64/jndadll.dll) not found in resource path

在确保dll可用的时候,将dll加入jna的jar包,一般用好压打开,然后放到对应的目录,我的是win32_64的,对应的目录是:com\sun\jna\win32-x86-64 直接拖进去就行。

3、idea工具编写demo使用jna中的c函数:

(1)、idea新建java工程

(2)、使用这个jna.jar包,方法:

注意红框中的操作步骤。

(3)、编写java代码:

public class TestJNA {

public interface CLibrary extends Library{

CLibrary INSTANCE = (CLibrary)Native.load("jndadll", CLibrary.class);

int checksum(String src_data, IntByReference check_ret);

}

public static void main(String[] args) {

// write your code here IntByReference check_ret = new IntByReference();

int flag = TestJNA.CLibrary.INSTANCE.checksum("123",check_ret);

System.out.println("MainActivity, checksum的返回标记:" + flag);

}

}

(4)、编译java,执行即可以了。其他使用可以参考jna官网手册java-native-access/jna

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值