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.

Foi útil?

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.

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

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top