Chamando código C# de Java?
-
09-06-2019 - |
Pergunta
Alguém tem uma boa solução para integrar algum código C# em um aplicativo Java?
O código é pequeno, então eu poderia reescrever em java, mas prefiro reutilizar o código, se possível.Não se repita, etc.
Além disso, sei que posso expor o C# como um serviço da Web ou algo assim, mas ele contém alguns itens de segurança/criptografia, então prefiro mantê-lo totalmente integrado, se possível.
Editar:Será em um aplicativo baseado em servidor, portanto, "baixar" outro tempo de execução é irrelevante.
Solução
Existe um compilador IL para Java Bytecode Gafanhoto que pode ser útil para você.Eu nunca tentei isso.
Eu gostaria de reescrever seu código em Java
EDITAR:Observe que o Grasshopper parece não estar mais disponível.
Outras dicas
Você usaria a Java Native Interface para chamar seu código C# compilado em uma DLL.
Se for uma pequena quantidade de C#, seria muito mais fácil portá-lo para Java.Se for muito, esta pode ser uma boa maneira de fazer isso.
Aqui está uma visão geral de alto nível disso:
http://en.wikipedia.org/wiki/Java_Native_Interface
Sua outra opção seria criar um assembly COM a partir do código C# e usar J-Interop para invocá-lo.
Eu sou autor de jni4net, ponte intraprocesso de código aberto entre JVM e CLR.É baseado em JNI e PInvoke.Nenhum código C/C++ necessário.Espero que isso ajude você.
Se for curto, acho melhor reescrever o código em java.Baixar um tempo de execução de 50 MB já é ruim o suficiente.
Nós costumavamos JNBridge para isso, e funcionou muito bem.Ele lida com Java->.NET e vice-versa, tudo em processo.
Se você não quiser reescrever o hadle como um Comunicação entre processos e escolha um dos seguintes:
- Tubos nomeados
- tomadas
- SABÃO
Eu o reescreveria se não fosse muito problemático.O serviço da web funcionaria, mas parece que seria muito trabalhoso apenas reutilizar um pouco de código.
http://www.infoq.com/articles/in-process-java-net-integration sugere executar CLR e JVM no mesmo espaço de processo e passar chamadas de um lado para outro.Parece muito eficiente.Vou tentar integrá-lo ao Jace se funcionar bem.
Se for um trecho de código que pode ser exposto como um utilitário de linha de comando, apenas faço a outra linguagem host usar uma chamada de sistema para executar o utilitário.
Se seu aplicativo C# precisar chamar Java, compile um Java main especial que receba argumentos de linha de comando apropriados e retorne a saída de texto.
É o método mais antigo e simples.
Você pode chamar suas classes c# (compiladas em uma dll) através de uma biblioteca bridging, diversas bibliotecas estão disponíveis, cada uma com suas características. JNBridge gere classes proxy que você pode chamar para gerenciar o código em classes java. Ponte JCO permitem que você carregue suas classes c# e use-as em java usando o mecanismo de invocação, também javanet permitem importar classes java e chamar código java usando o mecanismo de invocação.
Todas as soluções exploradas são soluções comerciais que permitem chamar código java do .NET e vice-versa com integração de interface gráfica de usuário e outras comodidades.
Ligações:
jnbridge Esquema de licença de desenvolvedor e implantação da ponte java-.NET com teste gratuito de 30 dias
jocobridge Esquema de licença de desenvolvedor e implantação da ponte java-.NET com avaliação ilimitada
javanet Esquema de licença java-.NET bridge Research and Professional com avaliação ilimitada de 30 dias após a inscrição