2009-02-04 33 views
47

Soy un programador de nivel de entrada así que sea descriptivo en sus respuestas.Utilice una API de biblioteca .jar java en C#?

Estoy tratando de usar una API de Java dada como un archivo .jar en mi aplicación C# .net. No sé mucho de Java, pero este archivo .jar dice "no hay atributo de manifiesto de clase principal" cuando intento ejecutarlo, así que esto significa que es una biblioteca. Esta API Java también viene con un archivo .java que muestra cómo usar la biblioteca pero no puedo ver el código dentro de .jar.

Encontré this question en este sitio, y una de las respuestas dice: "De manera simple, puedes empacar tus clases Java en archivos jar y luego en C# usar la clase Process para ejecutar y asignar IO stream". Estoy semi familiarizado con la clase Process en C#, pero no entiendo cómo podría usarlo para usar una biblioteca Java en mi proyecto C# .net.

¿Esto es posible? o fue esa respuesta incorrecta?

Si es así, podría explicar cómo puedo usar la biblioteca .jar en mi aplicación C#.

Respuesta

65

Puede hacerlo utilizando IVKM.Net. IVKM.NET incluye una aplicación llamada ikvmc. Aquí está la documentación de esta herramienta:

http://www.ikvm.net/userguide/ikvmc.html

para usarlo compilar el código Java en un tarro.

A continuación, ejecute el programa ikvmc:

ikvmc myCode.jar

Si el frasco contiene una función main(), que se convertirá en un EXE que se puede ejecutar en el CLR. De lo contrario, se convertirá en dll. Para usar los dll en su proyecto, simplemente agréguelos como referencias en Visual Studio y se podrá acceder a la misma API que estaba disponible para usted en Java en su aplicación .Net.

También puede incluir el dll IKVM.GNU.Classpath.dll de ikvmc y utilizar las bibliotecas de clase de Java estándar en su aplicación.

+0

gracias, lo intentaré. una vez que tenga el .dll y lo importe en mi proyecto, ¿debo llamar a la función de la biblioteca utilizando Pinvoke? – timmyg

+1

No necesita usar pinvoke. Debería poder simplemente llamar a la API como lo haría si estuviera escrita originalmente en C#. –

+1

debe cambiar "ejecutar en el CIL" en "ejecutar en el CLR" – LDomagala

4

Eche un vistazo a IKVM ... tiene herramientas para darle un cierto nivel de interoperabilidad. Cuando dices Java API, supongo que quieres llamar algunas funcionalidades del contenedor en lugar de simplemente ejecutarlo

+0

Correcto, el .jar no se ejecuta, informa un mensaje de error que dice: "Error al cargar el atributo de manifiesto de clase principal desde ...". Una vez que tenga el .jar convertido a .dll, intentaré usarlo igual que el ejemplo codificado en Java usando el .jar. – timmyg

Cuestiones relacionadas