我的操作系统是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

 

java 身份证信息读取 java读取身份证号读卡器_jdk

 

 

run以管理员身份运行

regsvr32 sdtapi.dll

regsvr32 C:\Windows\SysWOW64\sdtapi.dll

 

java 身份证信息读取 java读取身份证号读卡器_java 身份证信息读取_02

 

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

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

 

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

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

 

 

java 身份证信息读取 java读取身份证号读卡器_dll_03

 

 

java 身份证信息读取 java读取身份证号读卡器_jdk_04

 

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

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