Bonsoir,
J'aimerais savoir si il est possible avec Java d'utiliser une dll écrite en C/C++ sachant que cette dernière sert à programmer une carte d'acquisition via le port USB.
Ça parait bien compliqué n'est-ce pas ? Qu'en pensez-vous ?
Bonsoir,
J'aimerais savoir si il est possible avec Java d'utiliser une dll écrite en C/C++ sachant que cette dernière sert à programmer une carte d'acquisition via le port USB.
Ça parait bien compliqué n'est-ce pas ? Qu'en pensez-vous ?
Ceci devrait répondre à ta question : JNI dans les cours et tutoriels pour apprendre la programmation Java : http://java.developpez.com/cours/ et dans la FAQ Java JNI : http://java.developpez.com/faq/
Merci pour les cours et tutoriels Java ça aide mais si j'ai bien compris avec cette solution il faut avoir le code source de la dll, non ? Et justement ça n'est pas mon cas, la dll est fournie avec la carte d'acquisition mais pas la source hélas... Est-ce toujours possible dans ces conditions ?
Autant que je me rappelle (je peux me tromper - si c'est le cas, d'autres corrigeront ), dans un cas comme ca, il faut ecrire une 2e dll en C/C++ qui va faire appel aux fonctions de la premiere mais qui respecte le header JNI. Ensuite, il ne reste plus qu'a faire comme dans le tuto proposé par Robin56.
Salut,
C'est tout à fait cela. Avec JNI le code natif doit respecter le format native défini par JNI, et on ne peut donc pas appeler directement une autre librairie native quelconque sans passer par un intermédiaire.
De plus cette librairie peut également effectuer des conversions (en particulier si le type des données utilisés par la librairie est assez complexe.
Une autre solution serait d'utiliser JNA, qui peut s’avérer extrêmement simple à mettre en place avec le Direct Mapping si le type des données n'est pas trop complexe.
a++
Merci et +1. Avec cette astuce la dll de départ peut être écrite dans n'importe quel langage ou bien il faut absolument qu'elle soit écrite en C/C++ ? Je demande cela car finalement j'ai un doute, je ne suis pas sûr de savoir en quel langage elle est écrite.
Sinon pour ce qui est de JNA, qu'est-ce qui est considérée comme pas trop complexe en matière de données ?
Peut-on utiliser JNI ou JNA avec Eclipse ou NetBeans ?
Merci.
EDIT : J'ai trouvé ça http://mbaron.developpez.com/javase/jnijna dans les cours et tutoriels pour apprendre la programmation Java.
Peut-importe le langage original. Il faut juste que ce soit une librairie supporté par le système hôte.
La librairie peut utiliser n'importe quel type de données, mais tu devras créer les types correspondant en Java afin de pouvoir communiquer avec ta librairie.
Pour les types de base il n'y a aucun soucis (Default Type Mappings).
Mais si la librairie commence à utiliser en paramètres des structures/unions ou des passages par références c'est un peu plus délicat (rien d'impossible hein... C'est juste chiant à gérer).
Mais sinon ca se fait en deux-deux (exemple : http://www.developpez.net/forums/d11...s/#post6523814)
L'utilisation de JNI/JNA ou de toute autre librairie n'a rien à voir avec l'EDI.
Par contre avec JNI il faut compiler du code natif...
a++
Merci et encore +1. Je vais regarder ça...
Oui mais j'aimerais utiliser ces EDI car ils ont beaucoup d'avantages et je n'ai pas l'habitude de la ligne de commande...
Sinon si la dll est réécrite en C/C++ (en respectant les règles pour utiliser JNI) puis-je ensuite utiliser NetBeans ou Visual studio pour la compiler ?
Partager