在项目中遇到了这个问题
众所周知,java是一个虚拟机,在黑盒中运行,那么没有什么特殊手段的话(安卓不算),难以操控硬件,尤其是驱动芯片;通常芯片的官方都是有写好的API,但是多半不会去管你java,都是C写的。java如果想要使用这些API,只能引用DLL动态链接库。其实也有好处,DLL一般都很小,对最后开发的软件有好处。
调用dll,肯定不会是直接调用官方的,毕竟无论从调试还是功能开发的角度看,使用C调用官方的DLL里面的API再完成好功能,再封装成一个新的DLL,再由JAVA调用,这样一套流程更方便一些。
当然官方的lib多半是不好用的,比如是win32版本的这种情况,所以引申出本文。
言归正传,网上也有很多方案什么pexports软件啊,什么的,都试了试,又麻烦又不好使,很多多余的功能,用不上。
还是咱的吧,以FTDI的FT2232HL芯片举例
1、准备文件,首先是官方的DLL,这个就官网自己下载就好了
2、新建一个txt,然后改成.def文件,这有点像lib文件的头文件的样子
名字瞎烂取,不过还是建议取一样的
这个文件里面要填充的是dll的文件位置名字和lib要从DLL中抽取出来的函数名字
LIBRARY,后面是位置名字;显然,我把DLL和def文件放在一起了,所以就一个名
EXPORTS下面是要抽取出来的函数名
要说这函数名都是哪里来的,官方的lib通常不可读,我们也不去反编译它;但是在提供DLL文件的同时,官方一般附赠一个同名的.h头文件
这里面就有函数名,复制到excel里,然后直接规则分列再提取,最后修修检查一下就行了,不赘述了。
3、 一定要有Visio studio,我用的是2022版的
再开始菜单里找到这个x86_x64巴拉巴拉的exe,然后右键用管理员身份打开,一定要管理员,不然啥都干不了
4、转化lib
在弹出的命令行里面键入
cd C:\Users\XXXXXXXXXXXX\Desktop
这个是跳转到def和dll的所在位置,显然我放在桌面上了
然后键入
lib /def:ftd2xx.def /machine:x64 /out:test.lib
然后就会出现一个lib,一个exp文件,那个lib也就诞生了,还是64位的
任务结束