java调用动态链接库 dll

         最新使用java开发桌面程序,涉及到使用java调用二代身份证读卡获取人员身份、照片信息,使用厂家提供的SDK包,始终无法成功调用,碰到过很多问题,这里记录一下。最开始使用windows7  64操作系统,JDK64位,调用时要么出现:Unable to load library错误,要么出现接口方法无法初始化.厂家提供的是JNative.jar调用方式,经过查询,发现JNative不支持JDK64位,一度怀疑是厂家提供的动态链接库在64位操作系统下无法使用,想要厂家提供64位的动态链接库,结果厂家不搭理,只能自己想办法了。经过多次测试终于使程序可以正常在windows7 32位和windows 7 64位操作系统上正常运行:

   这里使用的是jna调用jar:

 

使用jna进行调用,在win7 32位操作系统:

动态链接库文件:

1)将动态链接库拷贝到:

C:\Windows\System32 目录下.

2)将动态链接库拷贝到项目的src目录下,编译后在bin目录中.

加载时:

String path= TestDlg.class.getResource("/").getPath().substring(1).replace("/","\\")+ "SynIDCardAPI";

                   SynIDCardAPIINSTANCE =(SynIDCardAPI)Native.loadLibrary(path,SynIDCardAPI.class);

3)在32位操作系统下自然使用JDK32


使用jna进行调用,在windows7 64位操作系统下:

使用JDK32版本,eclipse 32位,那么动态链接库都要拷贝到两个位置:

1)拷贝到C:\Windows\SysWOW64目录下(在64位操作系统下,可能是由于动态链接库的问题,还是只能使用32位的JDK,使用64位jdk还是无法正常使用,动态链接库拷贝到SysWOW64下,不要拷贝到System32)

2)将动态链接库拷贝到项目的src目录下,编译后在bin目录中

加载时:

String path= TestDlg.class.getResource("/").getPath().substring(1).replace("/","\\")+ "SynIDCardAPI";

                   SynIDCardAPIINSTANCE =(SynIDCardAPI)Native.loadLibrary(path,SynIDCardAPI.class);

3)在64位操作系统下,也使用JDK32,这个可能和使用的动态链接库有关,或许我使用的动态链接库就是32位的。不确定如果是64位的动态链接库是否可以正常运行.

使用过程中,一般容易报:

Unable to load library

 java.lang.UnsatisfiedLinkError: com.sun.jna.Native.pointerSize(),

java.lang.NoClassDefFoundError: Could not initialize class com.synjones.angel.TestDlg$SynIDCardAPI


错误原因:

   1.动态链接库位置不对。

   2.jdk 使用32或64位未匹配出现的问题。





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值