2008-09-08 4 views
30

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

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

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


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

+0

Если это сервер, на какой платформе? Я понятия не имею, насколько хорошо такие вещи, как COM-взаимодействие, работают с Mono, так что это еще один фактор, который следует учитывать. – FlySwat 2008-09-08 19:10:51

ответ

4

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

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

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

+0

Ссылка на канатную дорожку не работает. – 2016-12-28 22:46:45

+0

Возможно, больше не доступно – 2016-12-29 11:00:41

7

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

0

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

26

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

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

Вот HighLevel обзор его:

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

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

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

2

Если вы не хотите, чтобы переписать hadle его как Inter-process communication и выбрать один из следующих:

  • Именованные каналы
  • Розетки
  • SOAP
3

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

+1

Да, это коммерческий продукт. – Barton 2014-10-29 23:58:32

0

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

16

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

0

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

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

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