2008-10-07 8 views
4

Je dois intégrer une grande bibliothèque Java dans une application C++ assez volumineuse. Une solution consiste à utiliser JNI mais cela nécessite de coder à la main toutes les classes. Python a, par exemple, une merveilleuse solution avec JPype (http://jpype.sourceforge.net/) qui automatise le processus (bien que la même solution ne puisse pas être appliquée à C++ en raison de différentes natures C++ et Python).Meilleur moyen d'accéder aux classes Java à partir de C++? (mieux que d'utiliser JNI directement)

Merci,

Das

Répondre

4

SWIG est un outil qui vous permet de générer automatiquement des liaisons d'une langue à une autre. Il supporte C++ et Java et une douzaine d'autres langues.

+0

Je pensais que SWIG va créer un retour pour rendre les classes C++ disponibles pour Java (ou tout autre langage supporté) et non l'inverse (ce dont j'ai besoin). Je vais l'étudier. Merci. – dasloop

+0

J'ai peut-être mal compris la question alors. Je ne sais pas si SWIG vous permet d'aller dans l'autre direction. –

0

JNA est pas tout à fait ce que vous cherchez, mais il vous rendre la vie beaucoup plus facile. Il ne nécessite aucun code standard/généré - vous venez d'écrire une interface pour les méthodes que vous souhaitez appeler.

Certainement, il y a toutes les raisons d'utiliser JNA au lieu de JNI.

+0

Sauf si la vitesse est un facteur (JNA est un ordre de grandeur plus lent que JNI) – user48956

1

Il semble que ma question n'était pas assez claire. Peut-être que la confusion vient de JNI qui permet l'accès dans les directions de la cabine ...

Ce que je veux faire est d'accéder à une bibliothèque Java FROM C++. Autrement dit, quelqu'un me donne un fichier JAR qui contient une collection de classes compilées JAVA et je dois écrire du code en C++ pour y accéder (car je veux intégrer la fonctionnalité de cette bibliothèque Java dans une application C++).

espoir que cela clarifie le sens de l'accès :)

Merci,

Das

0

j'ai deux suggestions qui peuvent ou peuvent ne pas fonctionner pour vous:

D'abord, vous pourriez essayez quelque chose de très simple. Exécutez le code Java dans un processus séparé et communiquez avec celui-ci avec des tuyaux ou des sockets. C'est assez facile à faire, et ne nécessite pas de bibliothèques folles. L'inconvénient est que la communication est quelque peu limitée (juste quelques tuyaux simples), vous aurez besoin d'écrire votre propre enveloppe autour de lui pour envoyer des données

Deuxièmement, quelle est exactement cette bibliothèque? Peut-être pouvons-nous suggérer des alternatives qui ne sont pas écrites en Java, ce serait beaucoup plus facile à utiliser dans votre application C++?

Questions connexes