Как я могу вызвать .NET-код из Java? - PullRequest
23 голосов
/ 12 ноября 2008

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

Редактировать: я ищу способ в Java для вызова .NET методов

Ответы [ 6 ]

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

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

10 голосов
/ 12 ноября 2008

Я считаю, что Java может общаться с COM, а .NET может предоставлять интерфейсы COM. Так что это может быть очень легкое решение, которое не требует какой-либо третьей стороны. Существует также возможность использования сокетов для связи между программами, которые не требуют установки на компьютере тяжелого экземпляра IIS.

5 голосов
/ 12 ноября 2008

Вы смотрели на ИКВМ ?

2 голосов
/ 12 ноября 2008

Вы изучили собственный интерфейс Java?

В прошлом я занимался написанием библиотеки C, которая может вызываться как из Java, так и из .NET (а также COM, языка сценариев NSIS и других технологий).

JNI будет работать хорошо, если вы захотите выставить только несколько методов, но он может стать громоздким, если вы захотите, например, представить всю среду .NET из-за количества заголовочных файлов и методов-оболочек, которые вы бы сделали нужно создать.

1 голос
/ 12 ноября 2008

Мы пробовали IKVM в нашей производственной среде, но он продолжал падать. Мы используем JNBridge, который является коммерческим продуктом, но он очень стабилен и хорошо работает в нашей среде ASP.NET.

0 голосов
/ 27 июля 2012

Если вы хотите запустить свой Java-код в .NET (или Mono), это можно сделать с помощью IKVM .

Поскольку (насколько мне известно) текущие компиляторы Java не читают сборки .NET, есть 2 шага. Сначала вам нужно создать заглушку JAR , содержащую фиктивные классы и методы с сигнатурами сборки .NET, которую вы хотите использовать, чтобы javac (или ваша IDE) знали, какие методы доступны. Например, если вы хотите использовать что-то в основной стандартной библиотеке .NET из Java, запустите

ikvmstub mscorlib

, который генерирует заглушку mscorlib.jar. (Он обнаружил сборку Mono mscorlib.dll для меня автоматически под Linux, но если она не удалась, вам, возможно, придется указать полный путь к DLL.)

Затем вы можете написать файл Java, который его использует, например, ( на основе примера из документации IKVM ):

import cli.System.IO.Directory;
public class IKVMTest {
    public static void main(String[] args) {
        for(String file : Directory.GetFiles(".")) // From .NET standard library
            System.out.println(file);              // From Java standard library
    }
}

Обратите внимание, что к пакетам CLI добавляется cli., следовательно, импорт cli.System вместо System.

Для компиляции включите заглушку JAR в classpath:

javac -classpath mscorlib.jar IKVMTest.java

Поскольку связывание Java происходит во время выполнения, в выходных файлах class используются методы нужных имен и сигнатур, но вы можете заменить пустые методы-заглушки настоящими методами .NET при запуске под IKVM:

ikvm IKVMTest

и он будет печатать файлы в текущем каталоге, вызывая методы .NET.

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