J'ai un programme qui est developpé en langage C ,y-a t_il une methode ou un outil performant qui me permet de basculer entre le deux langages et d'utiliser les fonctionnalités avec java des source developpé en c.
Version imprimable
J'ai un programme qui est developpé en langage C ,y-a t_il une methode ou un outil performant qui me permet de basculer entre le deux langages et d'utiliser les fonctionnalités avec java des source developpé en c.
Non: un tel convertisseur d'applications n'existe pas.
Tu vas devoir développer ton application depuis le départ en java.
De plus, java est un langage "orienté objet", et pas le C. Donc plutôt qu'une conversion de code "pas à pas", il te faut envisager de repenser la conception même de ton application en objet pour vraiment tirer partie du langage.
bonjour
sinon, il est possible d'utiliser des librairies via JNI (voir les cours et tutoriels java) ce qui évite la réécriture, tu devra surement faire un wrapper pour que tout fonctionne sans modifier ton code c.
Merci pour votre aide, mais tu peux me dire ce quoi wrapper?
et aussi je veut te dire que j'ai besoin seulement d'appeler une classe en c lorsque je clique sur une bouton.
C'est un outil composé de trois parties ,2 developpées en java et une en c ,et il y-a aussi un menu principale qui vous permet de choisir une de ce trois parties .Cette men principale est developpé en java.la probleme est comment appler l'application developpé en c quant je clique sur une bouton du menu.
J'ai réussi a basculer du c à java mais l'inverse non.C'est pourquoi je posté cette question.
Je vais essayer d'être clair !
pour faire du JNI (surtout n'hesite pas a regarder les cours Java pour les details) il faudra faire plusieurs choses :
- ta classe en c
- ta classe java qui doit appeler la methode native en c
- le header généré avec "javah -jni ..." a partir de ta classe java compilée
- le wrapper qui va utiliser le header généré
imagine que tu aies une classe en c (monCodeC)qui possède la méthode suivante :
le code java suivant :Code:
1
2
3
4 DLLEXPORT const char *getMessage() { return "Mon message"; }
Le wrapper (MonWrapperJNI):Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 /** * */ package com.test.jni; /** * @author Moi * */ public class TestJNI { static { System.loadLibrary("MonWrapperJNI"); } public static void main(String[] args) { TestJNI tj = new TestJNI (); System.out.println("Le message : " + tj.getMessage()); } public native String getMessage(); }
Pour répondre a ta question le wrapper va permettre de faire le lien entre ton code c et JNI.Code:
1
2
3
4
5
6
7
8 #include <jni.h> #include <monCodeC.h> #include <com_test_jni_TestJNI.h> //normalement généré par javah JNIEXPORT jstring JNICALL Java_com_test_jni_TestJNI_getMessage(JNIEnv * env, jobject obj) { return env->NewStringUTF(getMessage()); }
Si tu as la possibilité de modifier directement le code c alors tu n'a plus besoin du wrapper car tu pourras directement mettre la methode Java_com_test_jni_TestJNI_getMessage(JNIEnv * env, jobject obj) dans ta classe c.
j'espère ca va t'aider ! :yaisse2:
Bonjour,
il est très facile de convertir à la main du C en Java (le contraire étant beaucoup plus complexe).
Le seul souci que tu pourrais rencontrer c'est les pointeurs sur des in, double, ... en paramêtre de fonctions. Une solutions nulle mais facile c'est de créer une classe PointeurInt, ... contenant juste un terme "value".
Sinon, tu peux compiler ta partie C et appeler l'éxécutable via la commande "execute". Il te faudra juste faire un fichier d'entrée/sortie pour envoyer les données au programme C puis les récupérer.