2009-12-03 16 views
7

gracias por leer esta pregunta.¿Hay herramientas para integrar Java y C++?

Estoy haciendo esta tarea que necesita una interfaz gráfica de usuario para integrar con el código de fondo que está escrito en C++.

Quiero escribir esta interfaz gráfica de usuario en java como su característica multiplataforma y componentes gráficos fuertes.

¿Hay alguna buena manera de integrar bien Java y C++?

Gracias

Respuesta

1

¿Qué tal Thrift?

Thrift es un marco de software para el desarrollo de servicios multilingües escalables. Combina una pila de software con un motor de generación de código para crear servicios que funcionen de manera eficiente y sin problemas entre C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk y OCaml.

3

Swig funciona muy bien. Es un medio para vincular C/C++ a una gran variedad de idiomas. Tengo experiencia en usar esto para hablar con C++ con muy poco dolor. Here's the manual page sobre el uso de Swig y Java juntos. The tutorial te pone en marcha muy rápido, con muchos ejemplos, incluido Java.

Sin embargo, investigaría la división de su aplicación en una arquitectura cliente/servidor, para separar el backend de C++ del front-end de Java. Evitará el desarrollo de C++/Java y el dolor de integración = aunque tendrá que implementar algún protocolo de comunicación entre el frente y la parte posterior dependiendo de los requisitos (por ejemplo, sockets básicos/webservice/HTTP + REST o posiblemente CORBA - que viene de forma nativa a Java y está diseñado para la comunicación entre idiomas).

1

Si no está escribiendo la biblioteca back-end C++ usted mismo, pero solo quiere utilizar una biblioteca de terceros, la mejor alternativa sería usar JNA.

El principal beneficio de usar JNA sobre JNI en este caso es que el código de puente está escrito en Java (en lugar del lenguaje nativo, C++ en su caso). Esto significa que no necesitaría complicar su proceso de compilación construyendo interfaces C++ JNI, todo su trabajo de interfaz se escribiría en el idioma del proyecto principal.

Sin embargo, si está escribiendo el backend C++ usted mismo, entonces cualquiera de las otras opciones ya proporcionadas sería igualmente aplicable.

+0

Tenga en cuenta que JNA solo funciona para bibliotecas con una API de C. –

2

Suponiendo que usted es el componente extremo posterior es en la misma máquina se puede utilizar una capa de interfaz tal como se describe por otros

  • JNI
  • JNA
  • Swig
  • QTJambi

Todos estos requieren que el backend de C++ esté disponible en un archivo dll y, por lo general, proporciona proxys Java para funciones C y, a veces, c + + clases Hay una curva de aprendizaje para todos estos y algunos trabajos para habilitar el Proxy.

Otro enfoque sería el uso de un proceso de C++ y comunicarse con esta utilizando

  • línea de comandos
  • stdin/stdout

Si quieres apoyar la comunicación a través de una red

  • tomas de corriente
  • CORBA
  • WebServices
  • Thrift

Estos también tienen una curva de aprendizaje y unos costes de establecimiento

De éstas, la línea de comandos o stdin/stdout es probablemente la más rápida de trabajar con el cantidad mínima de esfuerzo y conocimiento. Sin embargo, no se adapta bien a las interfaces grandes, ya que debe codificar la entrada y la salida de cada mensaje como texto

Para el método de la línea de comandos ejecuta el proceso C++ usando los modificadores de línea de comando para las opciones, los resultados se leen a partir de los procesos estándar o su código de salida.

Para stdin/stdout inicia el proceso cada solicitud se envía al stdin del proceso y los resultados se leen desde stdout.

Cuestiones relacionadas