2009-12-03 7 views
7

grazie per aver letto questa domanda.Esistono strumenti per integrare Java e C++?

Sto facendo questo compito che ha bisogno di una GUI come interfaccia per integrare con il codice di back-end scritto in C++.

Voglio scrivere questa GUI di front-end in java come funzionalità multipiattaforma e potenti componenti grafici.

C'è un buon modo per integrare bene java e C++?

Grazie

risposta

1

Hava un'occhiata a JNI (Java Native Interface). Sun ha un numero online book on JNI.

1

Che ne dici di Thrift?

Thrift è un framework software per lo sviluppo di servizi cross-language scalabili. Combina uno stack software con un motore di generazione del codice per creare servizi che funzionano in modo efficiente e uniforme tra C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk e OCaml.

3

Swig funziona molto bene. È un mezzo per legare C/C++ a una grande varietà di lingue. Ho esperienza di utilizzo di questo per parlare con C++ con pochissimo dolore. Here's the manual page sull'utilizzo di Swig e Java insieme. The tutorial ti fa andare molto velocemente, con molti esempi tra cui Java.

Vorrei tuttavia esaminare la suddivisione dell'applicazione in un'architettura client/server, per separare il backend C++ dal front-end Java. Eviterai lo sviluppo e l'integrazione in C++/Java = anche se dovrai implementare alcuni protocolli di comunicazione tra front e back end a seconda dei requisiti (es. Socket di base/webservice/HTTP + REST o eventualmente CORBA) che viene nativamente per Java ed è progettato per la comunicazione tra lingue diverse).

1

Se non si sta scrivendo la libreria di backend C++ da soli, ma si desidera utilizzare solo una libreria di terze parti, l'alternativa migliore sarebbe utilizzare JNA.

Il vantaggio principale dell'utilizzo di JNA su JNI in questo caso è che il codice di bridging è tutto scritto in Java (anziché nella lingua nativa, C++ nel tuo caso). Ciò significa che non avresti bisogno di complicare il tuo processo di compilazione costruendo interfacce JNI C++, tutto il lavoro dell'interfaccia verrebbe scritto nella lingua del progetto principale.

Se, tuttavia, si sta scrivendo il backend C++, tutte le altre opzioni già fornite sarebbero ugualmente applicabili.

+0

Si noti che JNA funziona solo per le librerie con un'API C. –

2

Supponendo sei il componente di estremità posteriore è sulla stessa macchina è possibile utilizzare uno strato di interfaccia, come descritto da altri

  • JNI
  • JNA
  • Swig
  • QTJambi

Questi richiedono che il backend C++ sia disponibile in una DLL e di solito forniscono proxy Java per le funzioni C e talvolta c + + lezioni. C'è una curva di apprendimento per tutti questi e alcuni funzionano per abilitare il proxy.

Un altro approccio sarebbe quello di utilizzare un processo C++ e comunicare con questo utilizzando

  • riga di comando
  • stdin/stdout

Se si desidera supportare la comunicazione attraverso una rete

  • prese
  • CORBA
  • WebServices
  • Thrift

Questi hanno anche una curva di apprendimento e alcuni costi istituito

Di questi la linea di comando o stdin/stdout è probabilmente il più rapido per lavorare con il quantità minima di sforzo e conoscenza. Tuttavia non si adatta bene alle interfacce di grandi dimensioni come è necessario codificare l'input e l'output di ciascun messaggio come testo

Per l'approccio da riga di comando si esegue il processo C++ utilizzando le opzioni della riga di comando per le opzioni, i risultati vengono letti dai processi standard out o dal suo codice di uscita.

Per stdin/stdout si avvia il processo in cui ogni richiesta viene inviata a stdin del processo e i risultati vengono letti da stdout.