2009-12-03 5 views
7

danke für das Lesen dieser Frage.Gibt es Tools, um Java und C++ zu integrieren?

Ich mache diese Hausaufgaben, die eine GUI als Frond-Ende benötigen, um mit Back-End-Code zu integrieren, der in C++ geschrieben ist.

Ich möchte diese Front-End-GUI in Java als seine Cross-Plattform-Funktion und starke Grafikkomponenten schreiben.

Gibt es eine gute Möglichkeit, Java und C++ gut zu integrieren?

Danke

Antwort

1

Wie wäre es mit ?

Thrift ist ein Softwareframework für die Entwicklung skalierbarer sprachübergreifender Dienste. Es kombiniert einen Software-Stack mit einer Codegenerierungs-Engine, um Services zu erstellen, die effizient und nahtlos zwischen C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk und OCaml arbeiten.

3

Swig funktioniert sehr gut. Es ist ein Mittel, um C/C++ an eine große Anzahl von Sprachen zu binden. Ich habe Erfahrung damit, mit wenig Kummer mit C++ zu sprechen. Here's the manual page auf Swig und Java zusammen. The tutorial bringt Sie sehr schnell, mit vielen Beispielen einschließlich Java.

Ich würde jedoch untersuchen, teilen Sie Ihre Anwendung in eine Client/Server-Architektur, um die C++ - Backend von der Java-Front-End zu trennen. Sie vermeiden die C++/Java - Entwicklung und - Integration pain = obwohl Sie je nach Bedarf ein Kommunikationsprotokoll zwischen Front - und Backend implementieren müssen (zB Basis - Sockets/Webservice/HTTP + REST oder möglicherweise CORBA - was nativ dazu kommt) Java und ist für die sprachübergreifende Kommunikation ausgelegt.

1

Wenn Sie nicht selbst die C++ - Backend-Bibliothek schreiben, sondern nur die Bibliothek eines Drittanbieters verwenden möchten, ist die bessere Alternative JNA.

Der Hauptvorteil der Verwendung von JNA über JNI in diesem Fall ist, dass der Überbrückungscode in Java geschrieben ist (anstatt in der Muttersprache, C++ in Ihrem Fall). Das bedeutet, dass Sie Ihren Build-Prozess nicht komplizieren müssen, indem Sie C++ - JNI-Schnittstellen erstellen. Alle Ihre Schnittstellenarbeiten würden in der Sprache des Hauptprojekts geschrieben.

Wenn Sie jedoch das C++ - Backend selbst schreiben, wären alle anderen bereits bereitgestellten Optionen gleichermaßen anwendbar.

+0

Beachten Sie, dass JNA nur für Bibliotheken mit einer C-API funktioniert. –

2

Angenommen, Sie sind die Back-End-Komponente auf derselben Maschine ist, dass Sie eine Zwischenschicht von den anderen als beschrieben

  • JNI
  • JNA
  • Swig
  • QTJambi
verwenden könnte

All dies erfordert, dass das C++ - Backend in einer DLL verfügbar ist und stellt normalerweise Java-Proxies für C-Funktionen und manchmal c + bereit + Klassen. Es gibt eine Lernkurve für alle diese und einige arbeiten, um den Proxy zu ermöglichen.

würde Ein weiterer Ansatz, einen C++ Prozess zu verwenden und mit diesem kommuniziert entweder

  • Befehlszeile
  • stdin/stdout

Wenn Sie über ein Netzwerk zur Unterstützung der Kommunikation

  • Buchsen
  • CORBA
  • WebServices
  • Thrift

diese Diese haben auch eine Lernkurve und einige Rüstkosten

Von der Befehlszeile oder stdin/stdout ist wahrscheinlich die schnellste mit der zum Laufen zu bringen minimaler Aufwand und Wissen. Es skaliert jedoch nicht gut zu großen Schnittstellen, da Sie die Eingabe und Ausgabe jeder Nachricht als Text codieren müssen. Für die Befehlszeilenmethode führen Sie den C++ - Prozess unter Verwendung von Befehlszeilenschaltern für die Optionen aus. Die Ergebnisse werden entweder gelesen aus dem Prozess Standard out oder seinen Exit-Code.

Für stdin/stdout starten Sie den Prozess jede Anfrage wird an stdin des Prozesses gesendet und die Ergebnisse werden von stdout gelesen.

Verwandte Themen