2010-08-13 16 views
1

Actuellement, j'ai les fichiers DLL (rfid.dll; cpl.dll; rfidtx.dll;) à la racine de mon paquet. Je fais un Bundle utilitaire pour maintenir le jna.jar et com.sun.jna à l'exportation, comme com.sun.jna.ptr services.Question sur DLL de chargement (à l'aide de la JNA) à l'intérieur d'un faisceau de OSGi

Le Manifeste pour le paquet en question ressemble à ceci:

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: ServiceImpl 
Bundle-SymbolicName: osgi.mti.serviceImpl 
Bundle-Version: 1.0.0.qualifier 
Bundle-Vendor: ZTESOFT 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: osgi.mti.service, 
org.osgi.service.component;version="1.1.0", 
com.sun.jna, 
com.sun.jna.ptr 
Service-Component: OSGI-INF/component.xml 
Bundle-NativeCode: rfid.dll;cpl.dll;rfidtx.dll; 
osname=WindowsXP; 
processor=x86 

Dans mon code, l'interface JNA est déclarée comme:

public interface CLibrary extends Library { 

    CLibrary INSTANCE = (CLibrary) Native.loadLibrary("rfid", 
      CLibrary.class); 
    ............ 

} 

Quand je en cours d'exécution, il y a des messages d'exception affichés . L'exception racine est:

java.lang.UnsatisfiedLinkError: Unable to load library 'rfid' 

Alors, comment puis-je résoudre ce problème? J'espère que quelqu'un peut m'aider.

+1

j'ai posé exactement la même question, il y a une réponse facile: [Charger DLL (à l'aide de la JNA) à l'intérieur d'un faisceau de OSGi] (http://stackoverflow.com/questions/1375550/load-dll-using-jna-inside- un-osgi faisceau) –

Répondre

1

Voir this question existante pour une explication en profondeur. JNA n'est pas conscient d'OSGi et utilise lui-même du code natif pour charger les bibliothèques. Apparemment, vous pouvez précharger la bibliothèque native (en laissant OSGi faire le travail, comme il se doit), qui satisfera alors le hook natif de JNA. Vous devriez alors pouvoir utiliser les API exposées par JNA via votre service. S'il vous plaît rapportez si cela fonctionne - j'ai utilisé avec succès "JNI" "standard" avec OSGi et a également essayé brièvement d'utiliser JNA, mais n'a obtenu nulle part en raison de son propre crochet chargeur.

+0

C'est une excellente suggestion et probablement la seule façon de faire fonctionner la JNA avec le mécanisme de mise à jour p2. –