IDEA⽤JNA调⽤C++编写的dll动态链接库完整流程
IDEA⽤JNA调⽤C++编写的dll动态链接库完整流程
这是⾃⼰在做完《基于AES加密的动态链接库设计与应⽤》的系统实训后⼀些个⼈总结。⾃⼰⽐较菜,在调⽤这⼀块前前后后花了⼤概有三天时间,最后才成功实现。所以在这⼉做些记录,如果你刚好遇到类似的问题,希望对你有所帮助。
⽣成DLL⽂件
我的系统实训使⽤C++写的动态链接库,⽤的软件是:Visual Studio 2017。
⾸先就是新建dll项⽬:
打开VS2017,⽂件->新建->项⽬->windows桌⾯->动态链接库
直接新建,默认是会有以下这两个头⽂件和两个cpp⽂件的:
我们不需要对这些⽂件进⾏操作,直接在头⽂件和源⽂件新建,并编写⾃⼰的程序⽂件就⾏。
下⾯是我的程序:
我在Dll1.cpp⾥已经写好了完整的函数(不需要主函数),因为最后是要导出使⽤的,所以在对应的头⽂件Dll1.h⾥我要声明导出函数,具体代码格式参照上图。
如果程序调试完成,我们就可以直接⽣成解决⽅案。这⾥要注意⽣成解决⽅案的时候要选择release下,因为debug下可能在调⽤时会有些问题,具体原因我也不是很清楚,然后根据⾃⼰系统选择是x86还是x64即可。
最后通过⽣成->⽣成解决⽅案,就能得到dll⽂件。
中途遇到⼀些问题基本百度都能解决。
最后成功⽣成解决⽅案,这⾥的路径就是dll⽂件的路径,直接可以到。
到这⾥,dll动态链接库就⽣成了。
JNA配置
接下来是配置JNA,我的IDEA是IntelliJ IDEA 2019.3.1 x64。⽽且我写的是⼀个web项⽬,所以使⽤的是IDEA的springboot框架。项⽬建好后,在l⾥配置⾃⼰已经下载好的JNA。
idea debug
除此之外,还要在下⾯这⾥配置下载好的JNA。
通过file->project structure->modules->最右边的+号
到这⼉IDEA⾥要配置的JNA都搞定了。
接下来就是导⼊函数。
函数导⼊
这⾥直接贴上我的导⼊动态链接库的代码。
如果遇到不到动态链接库的报错。
基本就是两个原因:
1.路径不对
路径不对的话,我这是直接⽤的绝对路径,基本不会出错,就是对于⼀个系统来说不⽅便。还可以把dll放到项⽬下,路径直接写⽂件名(不要后缀)
2.⽣成dll⽂件位数不对
这就是前⾯⽣成dll的时候选择的x86还是x64的问题了,只要和⾃⼰系统匹配就⾏。
如果动态链接库导⼊成功但是报错不到⾃⼰导出的函数。
原因⼤概也是两个:
1.导出函数在java声明这⾥的数据类型不匹配。因为dll是C++,你要⽤java调⽤,直接的数据类型匹配⾃然就是个问题。
详细知识可以直接百度或者参考这⼏个链接:
这⾥讲⼀个我⾃⼰遇到的问题,我是因为开始在c++⾥写的函数返回值是string和输⼊参数类型const string&类型,然后就⼀直报错不到导出的函数,后来发现是数据类型转换的问题,c++的string和jav
a的string不是⼀个东西,和java的string对应的其实是c++的char类型。⽹上翻了好久也没到合适的解决⽅法。最后是⾃⼰把原来的C++函数利⽤c++的string和char强制转换再封装⼀下,把函数返回值和输⼊参数都变成char*才解决。
2.在动态链接库⾥头⽂件声明导出函数格式不对。这个就要⾃⼰回头查看格式问题。
最后
完成上述步骤,基本就可以成功调⽤动态链接库⾥的⽅法了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。