【JNA】JAVA中使用JNA


# 使用JNA调用C/C++动态链接库dll 参考视频: * [Java使用JNA调用C/C++动态链接库dll_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV16t411A7it/)(不是特别对) * [【C++】JAVA使用JNA调用C++动态库DLL_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1xU4y1F7Ep?spm_id_from=333.1007.top_right_bar_window_default_collection.content.click)(推荐) GITHUB repository: * [java-native-access/jna: Java Native Access (github.com)](https://github.com/java-native-access/jna) * repository:[Copy2000/JNA_use: 使用JNA调用c++的类和函数 (github.com)](https://github.com/Copy2000/JNA_use) ## 准备 * 下载JNA和JNA Platform。 ![image-20220407232739677](【JNA】JAVA调用JNA/image-20220407232739677.png) ![image-20220407232838933](【JNA】JAVA调用JNA/image-20220407232838933.png) * 下载Code,可以使用SSH,更加快,但是我使用了VPN了,所以直接下载压缩包。 ![image-20220407233022480](【JNA】JAVA调用JNA/image-20220407233022480.png) * VScode安装JAVA扩展 * Extension Pack for JAVA(好像是6合1) * JAVA Development Kit * [下载java](https://www.oracle.com/java/technologies/javase-downloads.html) * 把下载的java添加到系统变量(2处)![image-20220409003946283](【JNA】JAVA调用JNA/image-20220409003946283.png)![image-20220409004015114](【JNA】JAVA调用JNA/image-20220409004015114.png)![image-20220409004036112](【JNA】JAVA调用JNA/image-20220409004036112.png) * cmd 运行`java -version` * vscode 在工作区设置setting.json![image-20220409004207504](【JNA】JAVA调用JNA/image-20220409004207504.png) * 检验 ``` java public class hello { public static void main(String[] args){ System.out.println("Hello World!"); } } ``` ![image-20220409004329142](【JNA】JAVA调用JNA/image-20220409004329142.png) * 上面介绍了用vscode安装java插件,接下来介绍eclipse,嘻嘻,专业的东西用专业的IDE。vscode,太难了。 * [安装eclipse。](https://www.eclipse.org/downloads/) * JDK的安装和上面类似。 --------------------- ## JNA的应用 在Windows中的Preferences中选择Build Path下的User Library![image-20220409154252057](【JNA】JAVA调用JNA/image-20220409154252057.png) 添加之前在github下载的三个文件。![image-20220409154331254](【JNA】JAVA调用JNA/image-20220409154331254.png) 之后在文件夹![image-20220409154433644](【JNA】JAVA调用JNA/image-20220409154433644.png),右键点击Build Path下面的Add Library选中我们添加的JNA。 ------------------------- 按住ctrl+click你想看到的函数源码,之后点击attach...的button,添加之前在github下载的zip文件,就可以看到源码了。![image-20220409154852563](【JNA】JAVA调用JNA/image-20220409154852563.png) ![image-20220409155025815](【JNA】JAVA调用JNA/image-20220409155025815.png) -------------------- 在vs studio中创建dll![image-20220409155357236](【JNA】JAVA调用JNA/image-20220409155357236.png) 主要使用的是testDLL.h和testDLL.cpp文件,相关的API和example在文件中已经给出。![image-20220409155555133](【JNA】JAVA调用JNA/image-20220409155555133.png) 在testDLL.cpp中写源文件,在testDLL.h定义![image-20220409160649433](【JNA】JAVA调用JNA/image-20220409160649433.png) ![image-20220409160702579](【JNA】JAVA调用JNA/image-20220409160702579.png) extern “C”是为了避免重载。 生成解决方案: ![image-20220409160738670](【JNA】JAVA调用JNA/image-20220409160738670.png) 在DeBug文件下面找到testDLL.dll![image-20220409160934107](【JNA】JAVA调用JNA/image-20220409160934107.png) ---------------------- 把dll文件放到![image-20220409161300374](【JNA】JAVA调用JNA/image-20220409161300374.png) ------------ 新建接口interface; 实例化interface:`Mydll mydll = (Mydll)Native.load("testDLL",Mydll.class);` 其中“testDLL”是testDLL.dll ![image-20220409164128527](【JNA】JAVA调用JNA/image-20220409164128527.png) ------------- jna数据类型对应。[ JNA数据类型的对应以及使用_江南老画船的博客](https://blog.csdn.net/hayaqi0504/article/details/83782105)![image-20220409164322035](【JNA】JAVA调用JNA/image-20220409164322035.png) ## 真正的应用 好了好了,不隐藏了,上面都是老子踩的坑,接下来才是正题。 资料[【C++】JAVA使用JNA调用C++动态库DLL_哔哩哔哩_bilibili](https://www.bilibili.com/video/BV1xU4y1F7Ep/?spm_id_from=333.788.recommend_more_video.-1) -------------- * 下载IntelliJ IDEA * 把debug改成release![image-20220410001545149](【JNA】JAVA调用JNA/image-20220410001545149.png) * 如果想要输出中文,要使用u8![image-20220410001739776](【JNA】JAVA调用JNA/image-20220410001739776.png) * 添加jna的库![image-20220410001816284](【JNA】JAVA调用JNA/image-20220410001816284.png) * 添加interface并且实例化![image-20220410001856274](【JNA】JAVA调用JNA/image-20220410001856274.png) * 调用![image-20220410001930152](【JNA】JAVA调用JNA/image-20220410001930152.png)

文章作者: copy
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 copy !
  目录