2008-11-12 20 views

Respuesta

10

Creo que Java puede hablar con COM y .NET puede exponer las interfaces COM. Entonces, puede ser una solución muy liviana que no requiera ninguna tercera parte. También existe la opción de usar sockets para comunicarse entre los programas que no requerirían una gran instancia de IIS para instalarse en la máquina.

+0

Exactamente. jacob.dll + jacob.jar –

+0

¿Puedo preguntar qué es COM en este caso? – Xitrum

+0

@Xitrum Component Object Model: estándar de MS en la plataforma de Windows para la reutilización de código a nivel binario. Personalmente, creo que es una tecnología fascinante. – smwikipedia

5

¿Has mirado en IKVM?

+1

Estoy buscando Java para llamar a los métodos de .Net –

+2

Sin embargo, podría ejecutar el código de Java dentro de IKVM: ese es el punto. Si realmente desea ejecutar una JVM "normal", eche un vistazo al proyecto Eclipse y cómo integraron WPF, que tenía una JVM y una CLR ejecutándose en el mismo proceso, creo. Sin embargo, es probable que sea bastante desordenado. –

+0

Lo siento, tienes razón. IKVM debería funcionar. –

2

¿Has visto la interfaz nativa de Java?

Lo que he hecho en el pasado es escribir una biblioteca C, que se puede llamar desde Java y .NET (y también con COM, lenguaje de scripts de NSIS y otras tecnologías).

El JNI funcionaría bien si solo quiere exponer algunos métodos, pero podría ser difícil de manejar si quisiera, por ejemplo, exponer todo el framework .NET, debido a la cantidad de archivos de encabezado y métodos de contenedor que necesitaría crear.

+0

Es muy fácil cometer errores malvados en JNI, pero definitivamente es una solución viable. Y mientras JNI defina algún puente simple, no debería pasar nada malo –

+0

¡¡Fácil es quedarse corto !! Con el puente NSIS donde se transmiten los argumentos en una estructura de pila (según recuerdo), logramos algunas fugas de memoria. –

1

Probamos IKVM en nuestro entorno de producción, pero siguió fallando. Usamos JNBridge, que es un producto comercial, pero es muy estable y funciona bien en nuestro entorno ASP.NET.

22

Soy el autor de jni4net, puente interproceso de código abierto entre JVM y CLR. Se basa en JNI y PInvoke. No se necesita código C/C++. Espero que te ayude.

+0

¡Su herramienta es genial! ¡Gracias! :) – davioooh

+0

Esta libreria es maravillosa! con la reflexión es todo! – jrey

+0

Esta biblioteca parece ser una buena idea, pero se dice que el estado es "alfa" y la última actualización en la página de inicio parece ser de 2011 :-( –

0

Si está dispuesto a ejecutar su código Java en .NET (o Mono), es posible hacerlo con IKVM.

Porque (hasta donde yo sé) los compiladores de Java actuales no leen los ensamblados .NET, hay 2 pasos. Primero necesita generate a stub JAR que contenga clases y métodos ficticios con las firmas del ensamblado .NET que desea usar, para que javac (o su IDE) sepa qué métodos están disponibles. Por ejemplo, si desea utilizar algo en la principal biblioteca estándar de .NET desde Java, ejecute

ikvmstub mscorlib 

que genera el talón mscorlib.jar. (Encontró el ensamblado Mono mscorlib.dll automáticamente en Linux, pero si falla puede que tenga que dar la ruta completa a la DLL.)

Luego puede escribir un archivo Java que lo use, p. (based on the example from the IKVM documentation):

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 
    } 
} 

Tenga en cuenta que los packges CLI tienen el prefijo cli., por lo tanto, la importación cli.System en lugar de sólo System.

Para compilar, incluyen el JAR talón en la ruta de clase:

javac -classpath mscorlib.jar IKVMTest.java 

ya que la unión de Java se produce en tiempo de ejecución, los archivos de salida class utilizar los métodos de los nombres y firmas deseados, pero se puede intercambiar el maniquí métodos stub con lo real.métodos NET cuando se ejecuta en IKVM:

ikvm IKVMTest 

y va a imprimir los archivos en el directorio actual llamando a los métodos de .NET.

Cuestiones relacionadas