DLL文件名称:InfoAuto.dll
我把这个文件放在\Java\jdk1.5.0_04\bin里,此目录已经在环境变量配置过了public class testdll {
static {
System.loadLibrary("InfoAuto");
} public native static ArrayList Info(String start, String end); public static void main(String[] args) {
testdll dll=new testdll(); dll.Info("2009-01-01","2009-12-30");
}
}
结果报错
Exception in thread "main" java.lang.UnsatisfiedLinkError: Info
at dll.testdll.Info(Native Method)
at dll.testdll.main(testdll.java:18)这个大概是怎么回事?怎么解决??
我把这个文件放在\Java\jdk1.5.0_04\bin里,此目录已经在环境变量配置过了public class testdll {
static {
System.loadLibrary("InfoAuto");
} public native static ArrayList Info(String start, String end); public static void main(String[] args) {
testdll dll=new testdll(); dll.Info("2009-01-01","2009-12-30");
}
}
结果报错
Exception in thread "main" java.lang.UnsatisfiedLinkError: Info
at dll.testdll.Info(Native Method)
at dll.testdll.main(testdll.java:18)这个大概是怎么回事?怎么解决??
如果用的话,我告诉你怎么指定native目录:
工程上右键->属性->Java Build Path -> Source ->找到你的native调用的java文件所在的源文件夹,展开
这个时候你会发现下面有三个子项目:
Include
Exclude
Native library location
选择Native library location,然后点右边的edit按钮。
然后选择dll文件所在的目录。
其实,最好的做法是在你的工程下建个lib文件夹,把dll文件也一并放在这个地方。这样移植会方便的多。
另外,你可以参照一下java.lang.System类的源代码,里面有基础native调用。
你好,我用的MyEclipse
我按照你说的方法,给工程配置了dll文件的目录,但是还是出现刚才的错误
这个是怎么回事?我感觉应该是DLL文件已经找到了
但是调用Info 方法时出错了?是这样吗?
你把环境变量里的那个native配置去掉,然后clean工程。
如果还有问题的话,InfoAuto.dll这个文件能否发给我一份:
[email protected]
Exception in thread "main" java.lang.UnsatisfiedLinkError: Info
at dll.testdll.Info(Native Method)
at dll.testdll.main(testdll.java:18)这个大概是怎么回事?怎么解决?? InfoAuto.dll已找到,但Info(...)方法没有找到。
原因在InfoAuto.cpp中查找。与JAVA代码与dll文件的位置无关。
这个文件是和DLL一起的吗?
System.getProperty("java.library.path")
可以查看
Info(startdate:PChar;enddate:PChar):TList;
我不太清楚他这个定义的是什么类型,不过他说的就是Info(String,Sting)返回list
那看来是他dll做的不标准?
我估计这个DLL就不是楼主的.其是别人的DLL,而且可能非标准,即JAVA不能直接调用,如何办?
这种情况很常见:我用JNI做过好多这种情况.
很简单[建议的做法是]:楼主自己用VC60的CPP写一个很小的标准DLL,由你这个DLL去调用那个不标准的DLL.
而你自己的JAVA通过JNI直接调用你自己的DLL就行了.这样做的好处是:在自己的DLL中,可包含进行类型转换或其它简化功能处理的代码.这样你的JAVA程序更好写了.