Вопрос

Есть ли у кого-нибудь хорошее решение для интеграции некоторого кода C # в java-приложение?

Код небольшой, поэтому я мог бы переписать его на java, но я бы предпочел повторно использовать код, если это возможно.Не повторяйтесь и т.д.

Кроме того, я знаю, что могу предоставить C # как веб-сервис или что-то еще, но в нем есть некоторые элементы безопасности / шифрования, поэтому я бы предпочел, чтобы он был тесно интегрирован, если это возможно.


Редактировать:Это будет приложение на базе сервера, поэтому "загрузка" другой среды выполнения не имеет значения.

Это было полезно?

Решение

Существует компилятор байт-кода IL для Java Кузнечик которые могут быть вам полезны.Хотя я никогда этого не пробовал.

Хотя я бы посмотрел на переписывание вашего кода на Java

Редактировать:Обратите внимание, что Grasshopper, похоже, больше недоступен.

Другие советы

Вы бы использовали собственный интерфейс Java для вызова вашего кода на C #, скомпилированного в DLL.

Если бы это был небольшой объем C #, было бы намного проще перенести его на Java.Если их много, это может быть хорошим способом сделать это.

Вот высокоуровневый обзор этого:

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

Другим вашим вариантом было бы создать COM-сборку из кода C # и использовать J-Interop для ее вызова.

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

Я являюсь автором книги jni4net, внутрипроцессный мост с открытым исходным кодом между JVM и CLR.Он построен поверх JNI и PInvoke.Никакого кода на C / C ++ не требуется.Я надеюсь, что это поможет вам.

Если это коротко, я думаю, вам лучше переписать код на java.Загрузка одной 50-мегабайтной среды выполнения достаточно плоха.

Мы использовали Джонбридж для этого все и сработало отлично.Он обрабатывает Java-> .NET и наоборот, все в proc.

Если вы не хотите переписывать, используйте его как Межпроцессная коммуникация и выберите один из следующих вариантов:

  • Именованные трубы
  • Розетки
  • МЫЛО

Я бы переписал его, если это не доставит вам слишком много хлопот.Веб-сервис работал бы, но, похоже, это потребовало бы больших накладных расходов только для повторного использования небольшого количества кода.

http://www.infoq.com/articles/in-process-java-net-integration предлагает запускать CLR и JVM в одном и том же пространстве процессов и передавать вызовы туда и обратно.Это звучит очень эффективно.Я собираюсь попробовать и интегрировать это в Джейс если это хорошо сработает.

Если это фрагмент кода, который доступен как утилита командной строки, я просто заставляю другой язык хоста использовать системный вызов для выполнения утилиты.

Если вашему приложению на C # необходимо вызвать Java, скомпилируйте специальный Java main, который принимает соответствующие аргументы командной строки и возвращает текстовый вывод.

Это самый старый и простой метод.

Вы можете вызывать свои классы c # (скомпилированные в dll) через связующую библиотеку, доступны различные библиотеки, каждая со своими характеристиками. Джонбридж создайте прокси-классы, которые вы можете вызывать для управления кодом в классах Java. Мост JCOBridge позволяет вам загружать ваши классы c # и использовать их из java, также используя механизм invoke джавонет позволяет импортировать классы Java и вызывать java-код, используя механизм invoke.
Все рассмотренные решения являются коммерческими решениями, которые позволяют вызывать java-код из .NET и наоборот с интеграцией графического пользовательского интерфейса и другими удобствами.

Ссылки:
джонбридж java-.NET соедините схему лицензирования разработчика и развертывания с 30-дневной бесплатной пробной версией
мост jcobridge java-.NET соедините схему лицензирования разработчика и развертывания с неограниченной пробной версией
джавонет java-.NET объедините исследовательскую и профессиональную лицензионную схему с 30-дневной неограниченной пробной версией после регистрации

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top