Я читал много сообщений об этом, но никто не затрагивает мою проблему.Другая проблема JNI UnsatisfiedLinkError DLL
У меня очень маленькая DLL, которая позволяет процессу Java отправлять сообщения Windows. Он просто вызывает
FindWindowEx(...)
SendMessage(...)
Я собрал, что с VS2005 и связаны с/т, и все это хорошо, но если я пытаюсь сделать мой DLL зависит от MSVCRT и связь с/MD, то я получаю неудовлетворенную ошибку связи.
java.lang.UnsatisfiedLinkError: MyDll.dll: Не удается найти зависимые библиотеки
По depends.exe имеет два недостающих библиотек DLL, GPSVC.DLL и ieshims.dll. Первый существует в c: \ windows \ system32, а второй - в пути winsxs. Есть LOADS из других DLL, загруженных из c: \ windows \ system32 и GPSVC.DLL - это странно, даже когда администратор моей машины win7x64, я не могу работать, зависит от этого - он говорит, что он не найден ...
во всяком случае, я пытался принуждать загрузку обоих этих библиотек DLL в моей Java с помощью (упрощенно - я не в состоянии контролировать 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);
, но это не имело никакого значения. Я могу отказаться, чтобы сделать его статически связанным, но я бы предпочел.
Любые идеи о том, что я могу попробовать дальше? Antony
Я создаю 32-разрядную и 64-разрядную версию моей DLL и запускаю vcvarsall с x86 или amd64 по мере необходимости. Моя командная строка CL: cl/I% JAVA_HOME% \ include/I% JAVA_HOME% \ include \ win32/nologo/W4/EHsc/O2/D "NDEBUG"/D "WIN32"/D _USRDLL/MT/LD PresencePump.cpp /FePresencePump-%1.dll/link/subsystem: windows : Обе эти библиотеки DLL работают с использованием статического связывания/MT выше, но если я использую/MD/D _AFXDLL, то у меня есть проблема. – adb