Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe.
Non, c'est .class
comment linker ces deux fichiers qui ne sont pas de meme nature.
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe.
Non, c'est .class
comment linker ces deux fichiers qui ne sont pas de meme nature.
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe.
Non, c'est .class
comment linker ces deux fichiers qui ne sont pas de meme nature.
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
"Marilyn Dubois" wrote in message
news:<41352de8$0$335$...
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.
"Marilyn Dubois" <mari.lyn@skynet.be> wrote in message
news:<41352de8$0$335$ba620e4c@news.skynet.be>...
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.
"Marilyn Dubois" wrote in message
news:<41352de8$0$335$...
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.
Re-bonjour,
Merci infiniment pour ces explications on ne peut plus claire.
C'est vrai que je ne connais pas bien le langage 'JAVA'.
Je n'avais pas spécialement de projet à mettre en marche aux deux langages
de progam.....
C'étais de la curiosité plus qu'autre chose.
Je sais maintenant que les deux langages ne sont pas de meme nature
et incompatibles, sauf dans les cas que tu a énumerés ' les sockets'
Encore merci.
M.D.
"Vince44" a écrit dans le message de
news:"Marilyn Dubois" wrote in message
news:<41352de8$0$335$...Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.
Re-bonjour,
Merci infiniment pour ces explications on ne peut plus claire.
C'est vrai que je ne connais pas bien le langage 'JAVA'.
Je n'avais pas spécialement de projet à mettre en marche aux deux langages
de progam.....
C'étais de la curiosité plus qu'autre chose.
Je sais maintenant que les deux langages ne sont pas de meme nature
et incompatibles, sauf dans les cas que tu a énumerés ' les sockets'
Encore merci.
M.D.
"Vince44" <vc.spam@free.fr> a écrit dans le message de
news:bd92ef38.0409020116.21281628@posting.google.com...
"Marilyn Dubois" <mari.lyn@skynet.be> wrote in message
news:<41352de8$0$335$ba620e4c@news.skynet.be>...
Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.
Re-bonjour,
Merci infiniment pour ces explications on ne peut plus claire.
C'est vrai que je ne connais pas bien le langage 'JAVA'.
Je n'avais pas spécialement de projet à mettre en marche aux deux langages
de progam.....
C'étais de la curiosité plus qu'autre chose.
Je sais maintenant que les deux langages ne sont pas de meme nature
et incompatibles, sauf dans les cas que tu a énumerés ' les sockets'
Encore merci.
M.D.
"Vince44" a écrit dans le message de
news:"Marilyn Dubois" wrote in message
news:<41352de8$0$335$...Bonjour à tous,
Comment inclure du code java dans du c++.
Autrement dit : est-t-il possible d'avoir un fichier java,
et un fichier en c++ ?
Puis, comment compiler et linker ces deux fichiers ?
Un petit exemple me serait utile.
Le fichier java, à ma connaissance, lors de sa compilation,
devient un fichier avec l'extention classe. Dés lors
comment linker ces deux fichiers qui ne sont pas de meme nature.
Pouvez-vous m'éclairer.
Merci
Salut,
Je peux me gourer mais j'ai l'impréssion que tu ne connais pas bien
java... Si c'est le cas la réponse de Jean-Marc ne devrais pas bcp
t'aider... Je vais essayer de me lancer dans une réponse pour
débutant.
En principe, on ne peut pas associer Java et C++ de la même manière
que l'on associe C++ et VB ou Delphi... On ne peut pas créer des
librairies en Java et les linker avec des programmes C++. La raison
est simple, les fichier .class de java sont l'équvalent des binaires
éxécutables de C++ (DLL, EXE) mais ils sont conçu pour être éxécuté
(en réalité interprété, mais peut importe) par une machine virtuelle
Java, alors que les binaires C++ sont conçu pour être éxécuté par une
machine physique d'un certain type (exemple PC sous Windows 32 bit).
Linker des fichiers class avec des binaires C++ c'est un peut comme
essayer de linker une DLL C++ écrit pour windows 32 bits sur avec un
excutable C++ écrit pour un unix 64 bits, ça revient à filer une
cassette vidéo à un lecteur DVD :-) (c'est pour l'humour, je me doute
que tu n'as pas besoin de ça pour comprendre).
Par contre Java et C++ peuvent communiquer, mais ça n'est pas aussi
simple que de linker deux fichiers.
Le plus simple à mettre en oeuvre c'est de les faire communiquer par
les sockets, un peu comme un client et un serveur. Par exemple tu
écrit un programme java qui gère la partie graphique et base de donnée
et qui de temps en temps envoi une demande de traitement (exemple
compression d'un fichier) à un programme C++ qui est esclave du
programme Java (c'est juste une boucle qui attend les instructions sur
le socket et les execute). En bref c'est une communication par message
via un canal portable. Cette méthode fonctionne avec deux programmes
sur une même machine, sur deux machines de même type, et sur des
machines de types différents (moyennant la gestion des problèmes de
byte ordering)... Cette méthode est donc simple et portable mais elle
ne permet de répondre à certaines contraintes.
L'autre méthode classique c'est JNI (Java Native Interface) qui permet
d'appeller une DLL (ou l'équivalent sur d'autres OS) depuis un
programme java, et réciproquement d'appeller la machine virtuelle Java
depuis un programme C++. Bref tout ce qu'il faut pour dialoguer en
local (sur une même machine). Cette technique est aussi portable, la
partie java n'est pas à adapter à chaque plateforme, la partie C++ est
juste à recompiler et relinker... En gros c'est basé sur une API
d'appel depuis C++ et sur des conventions de nommage. Par contre c'est
assez perturbant quand on ne connait pas bien les mécanismes des deux
languages, mais ça ne pose problème que pour de la communication
asynchrone... Ce qu'il faut en retenir c'est que c'est plutôt fait
pour appeler C++ depuis Java que l'inverse, mais avec qq bidouilles on
s'en sort assez bien... Mais je ne ferais pas ça pour une interface
graphique en C++ et un composant métier en Java... L'avantage, c'est
que ça évite de devoir apprendre les socket sur chaque plate-forme...
Voilà pour les deux méthodes de communication que j'ai pratiqué,
l'autre méthode possible c'est l'utilisation de CORBA. Corba permet de
créer un programme dans lequel on partage certains objets situés sur
différentes machines de différents type. Ces objets peuvent avoir été
créé par des programmes écrit en différents languages C++, Java,
Delphi... Des machines différente, donc pour le cas qui nous
intérresse, une machine virtuelle java et la machine physique
sous-jacente... ça fonctionne par un language de définition commun des
objets qui permet à un programme intermédiaire de les rendre
compréhensible d'un langage et d'une plate-forme à l'autre.
Inconvénient c'est assez lourd à comprendre et mettre en oeuvre.
Avantage c'est très puissant et ça permet d'ignorer les différence
entre les plate-formes et langages dans la communication.
Quelque soit le moyen utilisé les passages seront bcp plus long qu'un
appel de fonction classique, il faut donc bien cloisonner les
composants...
Concernant ce qu'a cité JM Vanel, je pense que ça n'est pas à la porté
d'un débutant, alors ça n'est à étudier que si ça apporte un vrai plus
à ton application...
Tu devrais peut-être nous dire ce que tu veux faire, pour qu'on te
trouve une solution adaptée...
Voilà,
Bon courage...
PS: Je ne suis pas très souvent sur le forum, si tu veux me poser une
question mon adresse est vincent point classine a rond base free point
est faire.