Я использую jni4net для доступа к Java-коду из приложения C# и наоборот. jni4net использует отражение для создания прокси-кода JNI-кода, поэтому очевидно, что одно из ограничений заключается в том, что ваш код Java и C# должен скомпилироваться для создания прокси.Двухсторонний объект, проходящий через jni4net (был: Игнорировать Missing Class (es))
К сожалению, это может привести к проблеме catch-22. Рассмотрим:
C# класс X использует Java класс Y
Java класс Y использует C# класс X
Ни может быть составлен, поэтому хорошо установлено временное решение взять один из классов (или X или Y), разделите его на свою голую подпись и попросите его скомпилировать, а затем сгенерируйте прокси-сервер из скомпилированного скелета. Затем вы можете заменить разделенный класс оригиналом и продолжить свой весёлый путь.
Это кажется уродливым подходом ко мне, и я считаю, что должен быть лучший способ. Очевидным решением было бы рассказать компилятору (либо C#, либо Java, на самом деле неважно) игнорировать ссылки на отсутствующий класс.
Не игнорирует ссылки на некоторый недостающий класс, допустимый для компиляторов C# или Java? Есть ли лучший способ сделать это (и нет, я не открыт для рассмотрения сокетов или чего-то подобного, мне нужен настоящий interop между .NET и Java)?
Пример кода было предложено:
Пример кода с кодом jni4net моста удален для ясности. IA и IB простые интерфейсы также не включены.
Java:
public class A implements IA
{
public void m1()
{
System.out.println("m1 called");
}
public static void main (String args[])
{
IB b = new B();
b.m2(new A());
}
}
C#:
public class B : IB
{
public void m2(IA a)
{
a.m1();
A a2 = new A();
a2.m1();
}
}
Построение гимнастики все еще существует, вы просто автоматизировали их скриптом сборки. – Hassan