以下是基本工作结构:
MainProxy.dll ==> JNIClient.java
使用JNI,我已成功加载MainProxy.dll并能够调用本机函数。以下是必需的结构:
Main.dll ==> MainProxy.dll ==> JNIClient.java
但是当MainProxy.dll编译并与另一个DLL Main.dll链接时System.loadLibrary(" MainProxy");呼叫崩溃,异常
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: MainProxy.dll: The specified procedure could not be found
但是,MainProxy.dll已成功编译并链接到Main.lib,并且这两个DLL都被放置为与java一起收集。
知道是什么导致了这个问题以及如何解决这个问题?
上面是来自dependencywalker的快照。 ISPVPLPR.dll是Main.dll,LPRPROXY.DLL是MainProxy.dll。而这两者之间的联系看起来很好。 CreateNativeClass与ISPVPLPR.dll中的其他函数一起导出,而在LPRPROXY.dll中仅导入CreateNativeClass。
以上快照显示从LPRProxy.dll导出的本机函数
答案 0 :(得分:1)
最后,事实证明OpenCV预编译库是个问题。 ISPVPLPR.DLL正在使用OpenCV,复制的DLL是设置附带的默认值,并为WinXP Prof 64bit或Win2003 64bit编译。由于Opencv_Core241.dll需要来自Kernel32.dll的RtlLookupFunctionEntry和RtlVirtualUnwind函数,因此这些函数仅针对WinXP和Win2003 Kernel32.dll版本(MSDN Reference)提供。
解决方案很简单,可以为Win7重新编译OpenCV2.4.1并使用GOD祝福它可以工作。
答案 1 :(得分:0)
我建议您使用microsoft的Dependency Walker。使用此实用程序可以真正检查MainProxy.dll
是否与Main.dll
正确关联。
如果Dependency Walker向您显示问题,请告诉我们您如何编译和链接MainProxy.dll
。
当Dependency Walker显示您没有问题时,您将不再拥有java.lang.UnsatisfiedLinkError