Voici une procédure PD qui pourrait vous aider à identifier le problème.
Ajoutez ce qui suit à votre programme pour identifier les différences dans les chemins d'arc et de chargement entre les deux environnements d'exécution. Enquêter sur les différences de chemin/arc.
System.out.println(System.getProperty("java.library.path"));
System.out.println(System.getProperty("sun.arch.data.model"));
Vous pouvez utiliser l'utilitaire dumpbin.exe pour identifier les dépendances requises par la DLL en cours de chargement. Assurez-vous que les dépendances existent. utilisation Exemple:
C:> dumpbin /imports your.dll
Dump of file your.dll
File Type: DLL
Section contains the following imports:
**KERNEL32.dll**
Vous pouvez utiliser la commande where.exe pour trouver l'emplacement des dépendances. Exemple d'utilisation:
C:>where KERNEL32.dll
C:\Windows\System32\kernel32.dll
Si vous voyez:
C:>where KERNEL32.dll
INFO: Could not find files for the given pattern(s)
pourquoi la DLL Enquêter dépendante est pas sur le chemin.
Vous pouvez utiliser la commande dumpbin.exe pour vérifier 64 bits vs 32 bits.
Exemple:
C:>dumpbin /headers yourd.dll
Dump of file yourd.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
14C machine (x86) <-- 32bit DLL
C:>dumpbin /headers yourd.dll
Dump of file yourd.dll
PE signature found
File Type: DLL
FILE HEADER VALUES
8664 machine (x64) <-- 64bit DLL
enquêter sur toute 32bit vs mésappariements de 64 bits entre main/charge. Si votre JVM est 32 bits, vous devez utiliser des DLL 32 bits. Si votre machine virtuelle Java est en 64 bits, vous devez utiliser des DLL 64 bits. (Il est possible d'exécuter une machine virtuelle Java 32 bits sur un système d'exploitation 64 bits, mais les DLL JNI doivent être 32 bits (les DLL correspondent à la machine virtuelle Java et non au système d'exploitation.)