我的操作系统是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工作者们,向你们学习,同时也想留下点资料供后来者以及自己查询。