2012-04-16 4 views
0

J'ai un pilote dll à utiliser dans mon application Java. J'ai lu que j'ai besoin de créer un pont dll pour JNI. Tout d'abord je voudrais savoir si existe une utilité pour créer automatiquement ce pont. J'ai le code source de la Dll, et je sais aussi comment créer mon fichier d'en-tête de bridge (javah) mais je n'arrive pas à comprendre comment mettre en place un bridge car j'ai juste besoin d'appeler la méthode driver ... Pouvez-vous m'aider?Comment écrire un pont JNI dll

Par exemple, c'est l'en-tête de mon pilote:

BOOL CALLINGCONV IsInitialized(); 
int CALLINGCONV Initialize(int Slot); 
int CALLINGCONV Finalize(); 
int CALLINGCONV FinalizeML(int nSlot); 

Je lis aussi de la JNA, il semble plus facile, mais peut-être pas très vite, est-il vrai? Thnak vous

+0

J'ai oublié de dire que c'est un pilote C – Tobia

+0

À quelle vitesse en avez-vous besoin? À quelle fréquence ces méthodes sont-elles appelées? –

+0

JNA (https://github.com/twall/jna#readme) pourrait être plus facile que JNI pour ce cas d'utilisation. –

Répondre

0

JavaCPP est aussi facile que la JNA, mais aussi vite que JNI brut . Par exemple, cette classe Java pourrait permettre d'accéder efficacement ces quatre fonctions en Java, en supposant que les fichiers d'en-tête et bibliothèque sont nommés « driver.h » et « Driver.lib » respectivement:

import com.googlecode.javacpp.*; 
import com.googlecode.javacpp.annotation.*; 

@Platform(include="Driver.h",link="Driver") 
public class Driver { 
    static { Loader.load(); } 
    public static native @Cast("BOOL") boolean IsInitialized(); 
    public static native int Initialize(int Slot); 
    public static native int Finalize(); 
    public static native int FinalizeML(int nSlot); 
} 
0

Je vous suggérons 2 bibliothèques différentes qui rendent le travail plus facile avec JNI

Questions connexes