J'ai lu beaucoup de messages à ce sujet, mais aucun ne résout mon problème.Un autre problème DLL JNI UnsatisfiedLinkError
J'ai une très petite DLL qui permet à un processus Java d'envoyer des messages Windows. Il appelle simplement
FindWindowEx(...)
SendMessage(...)
Je compilé avec VS2005 et lié avec/MT et tout est très bien, mais si je tente de faire ma DLL dépendent MSVCRT et lien avec/MD je reçois l'erreur de liaison non satisfaite.
java.lang.UnsatisfiedLinkError: MyDll.dll: Vous ne trouvez pas les bibliothèques dépendantes
Selon depends.exe il a deux DLL manquantes, GPSVC.DLL et Ieshims.dll. Le premier existe dans c: \ windows \ system32 et le second dans un chemin winsxs. Il y a des CHARGES d'autres DLLs chargées de c: \ windows \ system32 et GPSVC.DLL est un impair en ce que même en tant qu'administrateur sur ma machine win7x64, je ne peux pas courir dépend de cela - il dit qu'il n'est pas trouvé ...
Quoi qu'il en soit, j'ai essayé de forcer une charge de ces deux DLL dans mon Java en (simplifié - Je ne suis pas dans le contrôle de 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);
mais qui n'a fait aucune différence. Je peux me replier pour le rendre statiquement lié, mais je préfère ne pas le faire.
Des idées sur ce que je peux essayer ensuite? Antony
Je construis une version 32 bits et 64 bits de ma DLL et exécute vcvarsall avec x86 ou amd64 selon les besoins. Ma ligne de commande CL est: 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 : Ces deux DLL fonctionnent en utilisant le lien statique/MT ci-dessus, mais si j'utilise/MD/D _AFXDLL, j'ai le problème. – adb