过程主要分为以下几个步骤:
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