Question

Quelqu'un a-t-il une bonne solution pour intégrer du code C# dans une application Java ?

Le code est petit, je pourrais donc le réécrire en Java, mais je préfère réutiliser le code si possible.Ne vous répétez pas, etc.

De plus, je sais que je peux exposer le C# en tant que service Web ou autre, mais il contient des éléments de sécurité/cryptage, donc je préfère le garder étroitement intégré si possible.


Modifier:Il s'agira d'une application basée sur un serveur, donc "télécharger" un autre moteur d'exécution n'est pas pertinent.

Était-ce utile?

La solution

Il existe un compilateur IL vers Java Bytecode Sauterelle qui pourra peut-être vous être utile.Je ne l'ai cependant jamais essayé.

J'envisagerais cependant de réécrire votre code en Java

MODIFIER:Notez que Grasshopper ne semble plus être disponible.

Autres conseils

Vous utiliserez l'interface native Java pour appeler votre code C# compilé dans une DLL.

S'il s'agit d'une petite quantité de C#, il serait beaucoup plus facile de le porter sur Java.Si c'est beaucoup, cela pourrait être une bonne façon de le faire.

En voici un aperçu de haut niveau :

http://en.wikipedia.org/wiki/Java_Native_Interface

Votre autre option serait de créer un assembly COM à partir du code C# et d'utiliser J-Interop pour l'invoquer.

http://sourceforge.net/projects/j-interop/

je suis l'auteur de jni4net, pont intraprocessus open source entre JVM et CLR.Il est construit sur JNI et PInvoke.Aucun code C/C++ nécessaire.J'espère que cela vous aidera.

Si c'est court, je pense qu'il vaut mieux réécrire le code en Java.Télécharger un runtime de 50 Mo est déjà assez pénible.

Nous avons utilisé JNBridge pour cela, et cela a très bien fonctionné.Il gère Java->.NET et vice versa, le tout en processus.

Si vous ne voulez pas réécrire, faites-le comme un Communication interprocessus et choisissez l'une des options suivantes :

  • Tubes nommés
  • Prises
  • SAVON

Je le réécrirais si cela ne pose pas trop de problèmes.Le service Web fonctionnerait, mais il semble que le simple fait de réutiliser un peu de code entraînerait une surcharge importante.

http://www.infoq.com/articles/in-process-java-net-integration suggère d'exécuter CLR et JVM dans le même espace de processus et de passer des appels dans les deux sens.Cela semble très efficace.Je vais l'essayer et l'intégrer dans Jace si ça marche bien.

S'il s'agit d'un morceau de code pouvant être exposé en tant qu'utilitaire de ligne de commande, je demande simplement à l'autre langage hôte d'utiliser un appel système pour exécuter l'utilitaire.

Si votre application C# doit appeler Java, compilez un fichier principal Java spécial qui prend les arguments de ligne de commande appropriés et renvoie une sortie texte.

C’est la méthode la plus ancienne et la plus simple.

Vous pouvez appeler vos classes c# (compilées dans une dll) via une bibliothèque de pontage, différentes bibliothèques sont disponibles, chacune avec ses caractéristiques. JNBridge générez des classes proxy que vous pouvez appeler pour gérer le code dans les classes Java. JCOPont vous permet de charger vos classes C# et de les utiliser depuis Java en utilisant le mécanisme d'invocation, également Javonet vous permet d'importer des classes Java et d'appeler du code Java à l'aide du mécanisme d'appel.
Toutes les solutions explorées sont des solutions commerciales qui vous permettent d'appeler du code Java à partir de .NET et vice-versa avec une intégration d'interface utilisateur graphique et d'autres commodités.

Liens:
jnbridge Schéma de licence de développement et de déploiement Java-.NET Bridge avec essai gratuit de 30 jours
jcobridge Schéma de licence de développement et de déploiement Java-.NET Bridge avec essai illimité
Javonet Schéma de licence Java-.NET Bridge Research et Professional avec essai illimité de 30 jours après l'inscription

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top