3 Stimmen

Kann ich eine plattformübergreifende Lösung für verschiedene Technologien haben?

Wir haben eine alte Anwendung, die eine FORTRAN API hat, die von anderen Anwendungen aufgerufen werden soll. Nach einiger Zeit haben sie einen ( C ) Wrapper für die FORTRAN API erstellt. Jetzt baue ich einen C++ Wrapper, mit ein wenig Datenverarbeitung, für die C API.

Also überlege ich, wie ich am besten eine API erstellen kann, die von jeder Programmiersprache aufgerufen werden kann.

Jetzt plane ich, einen RPC-Server von meiner c++ API aus zu bauen. Dann kann ihn jeder Client mit jeder Programmiersprache aufrufen.

Ich habe festgestellt, dass das XML-RPC gut ist. Aber es benötigt einen HTTP-Server für die Verbindung.

Das Problem ist, dass die Anwendungen, die unsere API aufrufen, Desktop-Anwendungen sind. Ich habe festgestellt, dass XML-RPC keine komplexen Objekte bearbeiten kann.

Ist SOAP eine gute Lösung? Kann die Client-Seite leicht implementiert werden?

Also, was ist die beste technische Lösung für meine Situation? Welche Technologie sollte ich verwenden?

Kommentar: Ich habe keine Erlaubnis, die Fortran API und die C API zu ändern. Und ich brauche die c++ API, weil ich ihr neue Methoden hinzufüge und den Code verbessere, damit der Benutzer die Methoden leicht aufrufen kann.

Mit freundlichen Grüßen,

2voto

Pete Kirkham Punkte 47746

Jede anständige Sprache verfügt über eine Foreign Function API. Rufen Sie einfach die Fortran-Funktionen direkt auf. Die Compiler-Dokumentation sagt Ihnen, wie - das Aufrufen von Fortran in einer gemeinsam genutzten Bibliothek ist dem Aufrufen von C in einer gemeinsam genutzten Bibliothek sehr ähnlich, außer dass verschiedene Compiler die Funktionsnamen möglicherweise in Kleinbuchstaben normalisieren oder nicht, oder ein Unterstrich hinzufügen können. Einige FFIs benötigen möglicherweise etwas C-Wrapper-Code - zum Beispiel Java - aber viele können einfach einen Funktionsnamen und Parametertypen sowie den Namen der zu ladenden Bibliothek akzeptieren.

Falls das nicht funktioniert, können Sie eine Streaming-Schnittstelle für das Fortran implementieren (lesen und schreiben auf die Standardausgabe) und einfach Eingaben hin und her leiten - das habe ich getan, als ich interaktive ISPF Fortran-Anwendungen schnell auf den PC portierte.


Da Sie die C++-API und Erweiterungen statt der Fortran-API freigeben möchten, sollten Sie sich SWIG ansehen, das den Prozess für verschiedene Sprachen automatisiert, solange der C++ nicht zu kompliziert ist.

2voto

greyfade Punkte 24134

Der beste Weg ist, es einfach in Ruhe zu lassen und nur die C-API zu verwenden. Praktisch alle Programmiersprachen können direkt auf eine C-API zugreifen, daher besteht kein Grund, Wrapper zu erstellen, es sei denn, das Programmiermodell einer bestimmten Sprache ergibt in anderer Weise mehr Sinn.

Zur Verdeutlichung, schau dir GTK+ an. Es ist eine C-API und in praktisch jeder Sprache verwendbar. Wrapper existieren in objektorientierten Sprachen, die einen rein objektorientierten Ansatz für die GTK+ API bieten, weil es für diese Sprachen, gegeben den Anwendungsbereich der API, sinnvoll ist.

Macht eine objektifizierte Schnittstelle für deine Anwendung Sinn? Wenn nicht, gibt es keinen Grund, sich die Mühe zu machen, einen C++ Wrapper zu erstellen.

In Bezug auf RPC, warum genügt nicht eine einfache Nachrichtenübergabeschnittstelle mit gemeinsamem Speicher?

0voto

TFD Punkte 22840

SOAP, XML-RPC usw. werden in der Regel für die Kommunikation zwischen Computern verwendet. Ist das es, was Sie möchten? Oder läuft das alles nur auf einem Computer?

Wenn es nur auf einem Computer läuft, bleiben Sie einfach beim C-API, die meisten Systeme können das verwenden

Wenn Sie das C-API als REST-Style-Service modellieren, können Sie auch einen HTTP-Service für Anwendungen bereitstellen, die das C-API ohne Dokumentation verwenden können, aber nur ein System haben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X