我已经阅读了很多关于此的帖子,但没有一个解决我的问题。
我有一个非常小的DLL,允许Java进程发送Windows消息。它只是调用
FindWindowEx(...)
SendMessage(...)
我已经使用VS2005编译并与/ MT链接并且一切正常,但如果我尝试使我的DLL依赖于MSVCRT并与/ MD链接,那么我会得到不满意的链接错误。
java.lang.UnsatisfiedLinkError:MyDll.dll:找不到依赖库
根据depends.exe,它有两个缺失的DLL,GPSVC.DLL和IESHIMS.DLL。第一个存在于c:\ windows \ system32中,第二个存在于winsxs路径中。有从c:\ windows \ system32和GPSVC.DLL加载的其他DLL的LOADS是一个奇怪的,即使作为我的win7x64机器上的管理员,我无法运行取决于它 - 它说它没有找到...
无论如何,我尝试在我的Java中强制加载这两个DLL(简化 - 我不能控制java.library.path)
Field field = ClassLoader.class.getDeclaredField("usr_paths");
field.setAccessible(true);
String[] paths = (String[]) field.get(null);
String[] tmp = new String[paths.length + 2];
System.arraycopy(paths, 0, tmp, 0, paths.length);
tmp[paths.length] = "c:/windows/system32";
tmp[paths.length + 1] = "c:/Windows/winsxs/amd64_microsoft-windows-ie-ieshims_31bf3856ad364e35_8.0.7601.17514_none_c06d7c9c27da8591";
field.set(null, tmp);
但这没有任何区别。我可以后退使其静态链接,但我宁愿不。
关于我接下来可以尝试的任何想法? 安东尼
答案 0 :(得分:0)
好吧,我使用的是Visual Studio 2010,但它也可以在2005上运行。
您可以尝试使用vcvarsall.bat配置VC编译器,您可以在/ MicrosoftVisualStudio20xx / VC中的ProgramFiles中找到它。
您只需使用以下选项之一在命令行中启动vsvarsall.bat:x86或ia64或x86_amd64或x86_ia64。我不知道它是否会有所帮助,但它可能是VC编译器未配置为使用64位机器的问题之一。
当我使用JNI时,我使用命令行来编译代码,我不得不在64位机器上配置编译器。
或者你可能会尝试通过命令行编译它。这是我最喜欢的教程http://www.ibm.com/developerworks/java/tutorials/j-jni/index.html