encpsulation de classes C++ en java

Le
philippe.mesmeur
Bonjour tous,

Tout d'abord, je vous explique que je suis un pur dbutant en Java,
donc merci de ne pas vous affliger si ma question est simplissime ou
n'a aucun sens.


Voila, j'ai besoin partir d'une application Java d'utiliser, piloter
une classe C++ fournie par une DLL.

A ce que j'ai pu voir, je dois utiliser JNI. Cependant, celui-ci va me
permettre de faire des appel des fonctions C, compiles avec un
compilateur C++, c'est dire utilisant les convention de nommage et
d'appel C++.

Par contre, je ne sais pas s'il est possible d'instancier et utiliser
des classes C++ directement via Java. La seule solution que je vois
est de passer par des fonctions C:
- une fonction create qui va instancier ma classe et me renvoyer un
int contenant l'adresse de l'objet cre
- autant de fonctions C que de mthodes de la classe encapsuler.
Chaque mthode prenant en paramtre l'int renvoy par la fonction
create ainsi que les mmes paramtres que la fonction encapsuler
- une mthode destroy prenant en paramtre l'int renvoy par la
fonction create

Cette faon de faire ne me satisfait pas vraiment: connaissez vous une
faon plus lgante de piloter des objets C++ via Java, pour pouvoir
faire quelque chose comme:

class MyCppCaller {



private void callFunction() {
m_myCppObject.Function();
}



public static void main(String args[]) {
new MyCppCaller().callFunction();
}




static { System.loadLibrary("MyCppLibrary"); }

private:
MyCppClass m_myCppObject;
}


Merci d'avance pour votre aide.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrick
Le #3346361
Bonjour à tous,

Tout d'abord, je vous explique que je suis un pur débutant en Java,
donc merci de ne pas vous affliger si ma question est simplissime ou
n'a aucun sens.


Voila, j'ai besoin à partir d'une application Java d'utiliser, piloter
une classe C++ fournie par une DLL.

A ce que j'ai pu voir, je dois utiliser JNI. Cependant, celui-ci va me
permettre de faire des appel à des fonctions C, compilées avec un
compilateur C++, c'est à dire utilisant les convention de nommage et
d'appel C++.

Par contre, je ne sais pas s'il est possible d'instancier et utiliser
des classes C++ directement via Java.


Bonjour,

Tu devrais regarder du côté de SWIG (www.swig.org) qui permet de faire
des choses plus sophistiquées que JNI et qui récupère pas mal de choses
de C++ (sauf l'héritage multiple je crois).

--
Patrick

Olivier Scalbert
Le #17538861
Patrick wrote:

Tu devrais regarder du côté de SWIG (www.swig.org) qui permet de faire
des choses plus sophistiquées que JNI et qui récupère pas mal de choses
de C++ (sauf l'héritage multiple je crois).



Effectivement, dans SWIG il y a un module qui peut créer une interface C
(plate) sur base de classes C++. Je ne l'ai pas essayé avec des
templates ou des exceptions mais normalement c'est aussi supporté ...

Olivier
Publicité
Poster une réponse
Anonyme