64位操作系统,java调用32位dll文件,实现身份证识别功能


我的操作系统是64位的。

身份证识别仪调用sdtapi.dll一开始使用如下方法,

//JNAReadCardDll cardDll=(JNAReadCardDll)Native.loadLibrary("C:\\Users\\maqing\\Workspaces\\MyEclipse 8.6\\IDCardManagerSwing\\sdtapi",JNAReadCardDll.class);

String sep = File.separator;

JNAReadCardDll cardDll=(JNAReadCardDll)Native.loadLibrary("sdtapi",JNAReadCardDll.class);

一直报java.lang.UnsatisfiedLinkError: Unable to load library 'sdtapi': 找不到指定的模块。

后来在网上看到一篇https://wenku.baidu.com/view/5a4a2e202f60ddccda38a01a.html(强烈推荐,程序拷下来可正常运行)

好心人做的身份证识别仪项目,使用的

System.loadLibrary("sdtapi");

closeJN=new JNative("sdtapi","SDT_ClosePort");

这种方式,运行application,报以下错误,然后就开始了漫长的64位操作系统加载32sdtapi.dll文件的过程。Can't load IA 32-bit .dll on a AMD 64-bit platform

 

查找的资料太多,大底的解决流程就是:

首先把sdtapi.dll文件放在C:\Windows\System32

64位的还要放在C:\Windows\SysWOW64

然后regsvr32 sdtapi.dll

 

 

 

run以管理员身份运行

regsvr32 sdtapi.dll

regsvr32 C:\Windows\SysWOW64\sdtapi.dll

 

 

尝试了DirectX修复系统工具,还是报一样的错误。

换了64位别的电脑,报同样的错误。搭了个虚拟机环境,32位winxp,报

 

开始怀疑是不是dll的问题了。

受到网上一篇文章的启发(感谢这篇实验文,找不到链接了T-T),更换tomcat或者JDK,application貌似跟tomcat没有什么关系,不管那么多了,反正都试一下,32位的jdk以及tomcat都安装了一遍,一开始找不到配置的地方,最后在

 

 

 

 

 

然后程序就正常了,用这种方法,使用Native.loadLibrary这种方式的程序也不报原来那个错了。

总之,感觉为了解决问题走的弯路都是值得的,但是网上查不到相关的资料,你需要遇到一个问题查找一堆资料解决一个问题,有的时候走的路是错误的你也不知道。感谢那些无私分享自己经验的IT工作者们,向你们学习,同时也想留下点资料供后来者以及自己查询。

 

参考资料:https://wenku.baidu.com/view/5a4a2e202f60ddccda38a01a.html

还有很多,没有保存链接,来回重启电脑解决问题,都冲没了

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM