Como posso call.NET código de Java?
editar: estou à procura de forma em Java para chamar os métodos. Net
6 answers
Sou autor de jni4net, Ponte de interprocesso de código aberto entre JVM e CLR. É construído em cima do JNI e do PInvoke. Não é necessário nenhum código C / C++. Espero que te ajude.
O que fiz no passado foi escrever uma biblioteca C, que pode ser chamada de Java e.NET (e também COM, NSIS scripting language, e outras tecnologias).
A JNI funcionaria bem se apenas quisesse expor alguns métodos, mas poderia tornar-se pesada se quisesse, por exemplo, expor toda a estrutura.net, devido ao número de ficheiros de cabeçalho e métodos de embalagem que teria de criar.
Se estiver disposto a executar o seu código Java em.NET (ou Mono), é possível fazê-lo usando IKVM.
Porque (tanto quanto sei) Compiladores Java atuais não lêem conjuntos.net, existem 2 passos. Primeiro você precisa gerar um jarro de stub contendo classes e métodos fictícios com as assinaturas do conjunto.NET que você deseja usar, de modo que javac
(ou o seu IDE) saiba quais os métodos disponíveis. Por exemplo, se você quiser usar algo na principal .net standard library from Java, run
ikvmstub mscorlib
Que gera o talão mscorlib.jar
. (Ele encontrou a montagem Mono mscorlib.dll
para mim automaticamente em Linux, mas se ela falhar você pode ter que dar o caminho completo para o DLL.)
Você pode então escrever um ficheiro Java que o usa, por exemplo ( com base no exemplo da documentação do 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
}
}
Note que os pacotes de CLI são prefixados com cli.
, daí a importação {[[8]} em vez de apenas System
.
Para compilar, incluir o frasco de stub no claspath:
javac -classpath mscorlib.jar IKVMTest.java
Desde que a ligação Java ocorre no tempo de execução, os ficheiros de saída class
usam os métodos dos nomes e Assinaturas desejados, mas você pode trocar os métodos de stub fictícios com os métodos reais. net quando executados sob o IKVM:
ikvm IKVMTest
E irá imprimir os ficheiros no directório actual, chamando os métodos. net.