Problème pour accéder aux fichier dll à partir d'un programme Java à travers JNA

J'ai un fichier dll et je suis en train d'appeler des fonctions au travers d'un programme Java à travers JNA

Mais le problème est qu'Il n'est pas capable de localiser mon fichier dll et en jetant l'exception suivante:

java.lang.UnsatisfiedLinkError: Unable to load library 'UsbDll': The specified module could not be found.

at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:163)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:236)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:199)
at com.sun.jna.Native.register(Native.java:1018)
at com.MainClass.<clinit>(MainClass.java:15)
Exception in thread "main"  

Ci-dessous mon programme:

package com;

import com.sun.jna.Native

public class MainClass {

    static {
        Native.register("UsbDll");
    }

public native int method();

    public static void main(String[] args) {
    }
}

Le nom de mon fichier dll est UsbDll.dll et mon système d'exploitation est Windows.

============================ ÉDITÉ ================================

L'emplacement de mon fichier dll est "c:\UsbDll.dll"

Lorsque j'ai placé un autre fichier dll dans le même emplacement, la JNA a été localisé, donc je pense que le problème est avec mon "UsbDll.dll" fichier uniquement.

Quand j'ai essayé de charger les deux fichiers dll (UsbDll.dll et la une autre dll) avec la commande suivante

System.load("c:\\UsbDll.dll");
System.load("c:\\another.dll");

Il chargé l' "another.dll" avec succès "UsbDll.dll" il lève l'exception suivante:

java.lang.UnsatisfiedLinkError: C:\UsbDll.dll: Can't find dependent libraries
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1699)
at java.lang.Runtime.load0(Runtime.java:770)
at java.lang.System.load(System.java:1003)
at com.MainClass.<clinit>(MainClass.java:16)

Exception in thread "main" 

T1. On dirait qu'il n'est pas de trouver certaines bibliothèques dépendantes. Mais comme je suis totalement nouveau pour ces dll, Est-ce que je suis absent ou j'ai besoin de demander au vendeur de me fournir les bibliothèques dépendantes.

OU

Est il dépend de certaines bibliothèques standards qui je peux le télécharger à partir d'internet? Si c'est le cas, comment faire pour trouver les bibliothèques nom dont il dépend?

============================ ÉDITÉ #2 ================================

J'ai couru le Dependency Walker sur mon UsbDll.dll fichier pour trouver les dépendances manquantes et que les dépendances manquantes.

WER.DLL (visée par la bibliothèque WINNM.DLL trouvé dans mon c:\windows\system32)

IESHIMS.DLL (visée par la bibliothèque WINNM.DLL trouvé dans mon c:\windows\system32)

WDAPI920.DLL (visée directement par mon UsbDll.dll)

T1. Comme WINNM.DLL a été trouvé dans mon dossier system32, il semble que la dll standard. Et si cette norme dll est en se référant à 2 dll manquantes (WER.DLL & IESHIMS.DLL), alors je soupçonne que la façon dont d'autres applications sont de travail qui sont à l'aide de cette WINNM.DLL fichier?

T2. J'ai googlé pour WDAPI920.dll (qui a été appelé mon UsbDll.dll directement) et le nombre de résultats de recherche est apparu avec le même nom de la dll. De sorte qu'il ressemble également à certains de la bibliothèque standard. Alors, comment résoudre ces dépendances? À partir de l'endroit où les télécharger? Après le téléchargement, puis-je les placer dans le même répertoire dans lequel mon principal dll (UsbDll.dll) est la ou j'ai besoin de faire quelque chose de supplémentaire à la charge de ma dll (UsbDll.dll) avec succès?

Il est tout à fait possible que le UsbDll.dll dépend de certains modules standard qui ne sont pas là sur votre système (par exemple, s'il utilise des ATL et si vous avez n'avez pas de bonne exécution, alors il est voué à l'échec). Pour résoudre cela, vous aurez besoin d'un bon environnement d'exécution. Aussi il est possible que la dll en question dépend de certains vendor module spécifique. Pour vous la meilleure option et la plus rapide de contacter le vendeur. Sinon, essayez d'installer la bonne exécution depuis le site de microsoft (mais plus de hit-et-essai).
De toute façon je suis incapable de poster des commentaires avec des liens :(. Je suis ajoutant que ans.
Essaie juste de savoir si le téléchargement DLL corrige, mais il serait préférable de savoir qui fournit le logiciel, et pour installer excatly que logiciel. Il peut être utile de télécharger la DLL et le regard dans la page de propriétés du fichier DLL, où le Vendeur et le nom du Logiciel (ou au moins devrait être raisonnable, bien développé Dll).
La version windows que vous utilisez?? Voir mon jour sna pour les dll manquantes, mais cela dépend de la Victoire et de la version de IE.
Ne connaissais pas le dependency walker. Merci beaucoup pour cette! 🙂

OriginalL'auteur Yatendra Goel | 2011-01-26