C++ appelle Java...

JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007 - 25 avril 2007 à 15:56
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 27 avril 2007 à 10:37
Salut tout le monde, je souhaiterais qu'une appli en C++ appelle une sorte de librairie Java pour l'utiliser.
J'ai étudié la piste "JNI", mais c'est l'inverse qu'on m'explique... A partir de Java ils font travailler des dll  issues du C++... Donc qui pourrait m'aider ? 

Merciiii

11 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
25 avril 2007 à 16:44
Je serais toi je ferais l'inverse : va poster sur cppfrance plutôt que sur javafr, car autant les programmeurs java savent utiliser du code C++ (avec JNI donc), autant les programmeurs C++ sont plus aptes à te répondre pour utiliser du code java !
0
JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007
25 avril 2007 à 16:48
Ok merci, je vais donc essayer de demander labas, mais j'attends d'éventuelles réponses ici quand même :)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
25 avril 2007 à 17:12
Qalut,

pour faire ce que tu veux il y a deux options :

1 - tu invoke un code java dans un code C++ (non compatible java 1.5 mais ok pour java 1.6) cherche sur le net des exemples relatif au code de invoke.c (ref : JNI Invocation)
2 - l'autre option est d'utiliser du CNI c'est du java en C++ (faut aimer)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007
25 avril 2007 à 17:29
Re coucou,

merci pour ta réponse.

Ce que je voudrais en fait , c'est appeller à partir d'un code C++ une librairie java ( je sais pas si ça peut être un .jar concrètement), une sorte d'équivalent de la DLL en c++.
Je ne veux pas intégrer de code java dans du code C++, et je veux réutiliser du code java qui marche déja, sous forme de classe et de méthodes.

Merci !  (j'espère que je c'est plus clair :p)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
25 avril 2007 à 17:42
Salut,

ca peut etre un jar de plus si tu te penche coté CNI tu peut transformer ton jar en .so (dsl pas de réponses pour windows) et te linker dessus pour l'utiliser comme si le code etait natif, par contre pour ce qui est de l'invocation tu seras obligé de faire de la reflexion sur ton jar pour instancier tes objets java via JNI (C ou C++)

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007
26 avril 2007 à 17:34
   Salut,

je reviens faire quelques précisions, car après de nombreuses recherches je me rends compte qu'à chaque coup la JVM va tourner sur la machine où le C++ appelle le java. Or dans mon cahier des charges je ne dois avoir qu'un executable écrit en C++ qui doit tourner, et non la Jvm, pour ne pas que l'on se soucie de son installation et de ses éventuels problèmes d'éxécutions.

De plus j'ai peut-être oublié de préciser que mon programme Java n'a besoin d'être lancé q'une seule fois avec un passage de paramètres, sans avoir à a se soucier des méthodes qu'il contient, excepté peut-être le "main" pour son execution.
Donc j'aimerais savoir si dans ta démarche la JVM va se lancer, et si non, comment faire éxecuter uniquement le "main"  de mon Java en lui passant un ou deux paramètres à partir d'un code C++, sachant que toutes les méthodes de mon code Java vont s'éxécuter automatiquement.

Et si la JVM est obligée de tourner, je ferais donc  une commande System(...) en c++ qui lancerait mon appli Java transformée en .exe, celà simplifierait tout ;) .

merci bien :)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
26 avril 2007 à 17:49
Salut,

alors pour info :
 - Si tu passes par les invocations tu es obligé d'avoir une JVM (démarrée depuis le code C++).
 - Si tu passes par gcj (avec ou sans CNI) pour rendre ton code java natif, tu auras aussi une JVM (plus légère)

Après si tu ne veux pas de VM faut que tu te penches sur une solution native.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007
26 avril 2007 à 18:02
Re salut ,
Je cite : "Après si tu ne veux pas de VM faut que tu te penches sur une solution native."
 et  : "Si tu passes par gcj (avec ou sans CNI) pour rendre ton code java natif, tu auras aussi une JVM (plus légère)"

La solution native, et rendre mon code java natif, ce sont deux méthodes différentes ? Car dans un cas on n'a pas de JVM, et dans l'autre cas si.

Merci :)
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
26 avril 2007 à 19:16
Salut,

nan lsolution native sans VM c'est du natif à 100% donc pas de java sinon la VM est obligatoire que ce soit une classique (sun, blackdown, ibm, etcc) ou celle de la lib gcj

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
JavaKool Messages postés 13 Date d'inscription mercredi 25 avril 2007 Statut Membre Dernière intervention 9 mai 2007
27 avril 2007 à 10:20
Salut,

en fait après plusieurs réflexions je vais dans un premier temps assurer mon travail en créant un .exe a partir de mon .jar, et en le lançant par le .exe écrit en C++ via la commande System(toto.exe, ...).

Sinon pour ce qui est de la solution native j'ai vu de la documentation à ce sujet, reprenant ce que tu m'as dit : il faut apparemment utiliser gcc 4.1.2 qui sait compiler le java en fichiers .o que l'on peut donc après utiliser avec le c++...

Et pour la solution windows, Twninuts, je pense avoir trouver qqchose : "cygwin", une sorte d'émulateur de bash linux qui va compiler le gcc je crois et permettre de le configurer et tout ...


Je vais aussi en profiter pour vous demander si c'était possible de
transmettre a mon "main" deux sortes d'arguments "String args[]" et
"int args[]" à la fois ?
Merci  :)

Merci
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 avril 2007 à 10:37
Salut,

toute façon la compilation d'une appli avec gcj ou gcc (c'est la meme chose casi) impose la présence de la lib cygwin.dll sous windows (pas besoin d'installer TOUT cygwin sur le poste client).

exemple dans notre boite on compile des binaire natif linux avec gcc sous cygwin et au moment de la livraison on fourni la dll cygwin (+ la lib gcj pour les appli java en natif)

concernant les arguments d'un main java tu ne peux pas faire main(int [] args mais simplement main(String [] args).

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

WORA
0
Rejoignez-nous