当前位置: 首页 > 技术支持 > 常见问题 > java工程中调用.dll文件易出现问题?

java工程中调用.dll文件易出现问题?

(1)Can't find dependent libraries或java.lang.UnsatisfiedLinkError: no JAVADLL_CDLLT in java.library.path,Error loading library JAVADLL_CDLLT;
解决方法: 将JAVADLL_CDLLT.DLL和cdllt8.dll拷贝到windows的System32目录下(JAVADLL_CDLLT.DLL是加密 锁的JAVA接口文件,文件在报表的安装目录下可以找到);并且要注意PATH环境变量中要包含System32目录。
注: 本机库的装入由调用 System.loadLibrary() 方法的类的类装入器启动 —— 硬时钟锁U1000_T中,就是 JAVADLL_CDLLT 的类装入器。根据使用的类装入器,会搜索不同的位置:
对于由 bootstrap 类装入器装入的类,搜索 sun.boot.library.path
对于由扩展类装入器装入的类,先搜索 java.ext.dirs,然后是 sun.boot.library.path,然后是 java.library.path
对于由系统类装入器装入的类,搜索 sun.boot.library.path,然后是 java.library.path。
在硬时钟锁UT中,JAVADLL_CDLLT 类是由系统类装入器装入的。要装入所引用的本机库,这个类装入器先查找 sun.boot.library.path,然后查找 java.library.path。因为在两个位置中都没有需要的库,所以类装入器抛出 UnsatisfiedLinkageError
(2)Exception in thread "main" java.lang.UnsatisfiedLinkError: 方法名造成这种错误的可能原因:
原因一:java虚拟机找不到声明native方法的本地语言定义(导入dll或者导入lib文件不正确导致)
解决方法:
静态导入(即在前面加static来导入Lib文件),动态导入时需加catch的抛出异常来解决,如
try { System.loadLibrary("JavaDll"); }
catch (UnsatisfiedLinkError e)
{ System.err.println("Can't find library JavaDll.DLL");
System.exit(-1); }
原因二:编写加密狗的JAVA接口文件时出错
解决方法:
1)检查JAVA类是否包含在包中(即开头为 package 包名),若有,编译头文件时要注意:
javac 包名/类名.java
javah -jni 包名.类名
这样生成的.dll文件才能与JAVA对应
注:在java工程中引入Demo.java和JAVADLL_CDLLT.java时所建的包名要与这两个类所在的包名一致!
2)注意在C文件中定义函数时字母的大小写
------分隔线----------------------------

软件加密   数据、文档加密   身份认证   安全存储   
北京素志科技发展有限公司 | 京ICP备12048725号-1
Copyright ◎2012 suciz.com Inc. All Rights Reserved. 版权所有