Вызов кода C # из Java? - PullRequest
       15

Вызов кода C # из Java?

32 голосов
/ 08 сентября 2008

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

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

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


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

Ответы [ 10 ]

29 голосов
/ 08 сентября 2008

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

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

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

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

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

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

17 голосов
/ 31 октября 2009

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

7 голосов
/ 08 сентября 2008

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

4 голосов
/ 08 сентября 2008

Существует компилятор байт-кода IL to Java GrassHopper , который может быть вам полезен. Я никогда не пробовал это все же.

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

РЕДАКТИРОВАТЬ: Обратите внимание, что Grasshopper, кажется, больше не доступен.

3 голосов
/ 09 сентября 2008

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

2 голосов
/ 09 сентября 2008

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

  • Именованные трубы
  • Розетки
  • SOAP
0 голосов
/ 26 марта 2019

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

Ссылки
jnbridge java- .NET bridge Схема лицензии разработчика и развертывания с 30-дневной бесплатной пробной версией
jcobridge java- .NET bridge Схема лицензии разработчика и развертывания с неограниченной пробной версией
javonet java- .NET bridge Схема лицензирования Research and Professional с 30-дневной неограниченной пробной версией после регистрации

0 голосов
/ 08 марта 2010

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

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

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

0 голосов
/ 22 апреля 2009

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

0 голосов
/ 08 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...