2012-08-17 10 views
7

Ich habe C++ - Code, den ich auf der Client-Seite einer Web-App bereitstellen möchte. Im Idealfall möchte ich JavaScript-Wrapper-Objekte für meine C++ - Klassen schreiben, damit ich sie clientseitig verwenden kann.Javascript C++ verbindlich?

Wurde dies schon einmal gemacht ?. Hat jemand einen Link, um zu zeigen, wie dies erreicht werden kann?

+0

Ist dieser C++ Code auf dem Server? Wenn nicht, wie bekommen Sie es zum Kunden? –

+0

Ich denke, er spricht über RMI. Es wären automatisch erzeugte Javascript-Objekte auf dem Client, die mit C++ - Code auf dem Server mit einem Serialisierungsmechanismus kommunizieren, den er nicht schreiben muss. –

+0

@ JohnWatts: Ja, Sie haben Recht, es ist effektiv RMI. Die C++ - Bibliothek wird auf dem Server vorhanden sein und die JavaScript-Klassen werden eine API bereitstellen, um mit der Back-End-Bibliothek zu interagieren. –

Antwort

1

Es ist eine Bibliothek C++ Code in JavaScript zu umwandeln, könnte es helfen: emscripten

+0

Ja, das habe ich gestern herausgefunden. Ich habe es heruntergeladen und habe damit angefangen zu experimentieren. Scheint wie der Weg zu gehen. –

+0

Ist dies immer noch die bevorzugte Bibliothek, oder gibt es modernere Ansätze, die Sie empfehlen? Ich frage mich, was @HomunculusReticulli heutzutage auch benutzt. Die einzige Aktualisierung, die ich in dieser Frage sehe, war in '14 und erwähnte v8bridge auf github. –

+1

@kayleeFrye_onDeck: Ich endete mit emscripten. HTH –

0

Ich denke, Sie möchten einen C++ JSON-Parser. Sie sollten in der Lage sein, hier http://www.json.org/ zu finden. Es kann nicht alles tun, was Sie wollen, denn es serialisiert und deserialisiert C++ - Objekte ohne jedes Verhalten, aber es sollte gut genug sein. Eine Diskussion finden Sie unter https://stackoverflow.com/questions/245973/whats-the-best-c-json-parser.

+0

hm, JSON implementiert nur die Daten, die zwischen den beiden Komponenten ausgetauscht werden. Ich denke, OP spricht über einfache Methode Exposure/Schnittstellen. – Constantinius

+0

@JohnWatts: Das ist ein guter Ausgangspunkt, aber ich weiß nicht, ob es zu dem passt, was ich versuche - nämlich ein Skript im Browser auszuführen - Hauptsache, das Skript wird das "Wrapped" verwenden C++ - Objekte. –

+0

@Constantinius: Ja, du hast den Punkt, den ich gemacht habe (als ich es eingegeben habe!) –

0

Wenn der C++ - Code auf dem Client sein muss, gibt es keine einfache Möglichkeit, dies für eine Webanwendung zu tun. Eine Lösung kann das Codieren von Plugins für die Browser, die Sie unterstützen möchten, umfassen, auf die dann von JavaScript-Code zugegriffen werden kann.

Wenn Sie dies zum Beispiel für eine Client-Anwendung benötigen, ist das ein anderer Fall. So etwas wurde getan und beinhaltet die Verknüpfung Ihrer Anwendung zu (oder von außerhalb) mit zum Beispiel Chrom-Bibliothek oder andere Javascript-Ausführung-Engine. Auf diese Weise können Sie Bindungen zu C++ - Klassen erstellen und solche Objekte aus JavaScript und umgekehrt verwenden. Beachten Sie, dass dies auch keine triviale Lösung ist und ein großer Aufwand zur Implementierung erforderlich ist (erfordert auch zusätzliche Ressourcen).

0

Sie könnten beispielsweise die C++ - Klassen in PHP oder Python einschließen und dann eine API über HTTP implementieren, um auf die erforderlichen Funktionen zuzugreifen.

Oder wenn Sie darauf bestehen, die Funktionen als JavaScript verfügbar zu machen, können Sie versuchen, Node.js zu verwenden, und ein C++ - Add-on erstellen, um Ihre Klassen zu umhüllen. Siehe die Node.js Dokumentation hier: http://nodejs.org/api/addons.html#addons_wrapping_c_objects

Ich denke jedoch nicht, vermeiden Sie die Erstellung einer Art von API (HTTP-SOAP, XML-RPC) für den Zugriff auf die Funktionen auf Ihrem Server.

+1

Warum eine zusätzliche Sprache/Framework verwenden? Ich bin mir sicher, dass es einen direkteren Ansatz gibt als eine andere Abhängigkeit. – Constantinius

+0

Ich habe gerade PHP und Python erwähnt, weil ich denke, dass es einfacher ist, C++ - Klassen in PHP oder Python als JS abzubilden. – nutrina

+0

Was nutzt Mapping-Klassen zu PHP/Python, wenn er sie in JavaScript benötigt? – Constantinius

0

Ich denke, dass RPC ist, was Sie wollen. Sie müssen Ihre Funktionen auf der Serverseite mithilfe einer Art Framework umschließen. Ich habe es noch nicht benutzt, aber this one sieht vielversprechend aus.

Auf der Client-Seite verwenden Sie Proxy-Objekte, um die Funktionsaufrufe zu versenden. Die Kommunikation erfolgt in der Regel entweder über XML-RPC oder JSON-RPC. Ich benutzte this client side framework und war ziemlich zufrieden, aber ich bin sicher, dass Sie find many others.

1

Libjspp C++ Vorlage basiert Wrapper für das Einbetten und Javascript-Engine Spidermonkey 1 erstreckt. 8. 5 und mehr

SpiderMonkey? ist Javascript/ECMAScript Engine von Mozilla Project.

Libjspp erlaubt C++ - Entwicklern, SpiderMonkey einzubetten? einfach und leicht in ihre Anwendungen. Libjspp erlaubt es, mehrere Javascript-Engines innerhalb desselben Prozesses zu betreiben, was zu einer Engine pro Thread-Par- zime passt, was hilfreich ist, um echte Parallisim zu erreichen. Libjspp hält Benutzer auch nicht davon ab, mehrere Threads innerhalb der Engine auszuführen.

http://code.google.com/p/libjspp/

+0

libjspp scheint ein leeres Git-Repository zu sein. – jjrv

1

Dies ist eine alte Topi, aber ich genau in der Situation war gerade jetzt, und alle Lösungen, die ich im Internet kompliziert oder veraltet gefunden.

Kürzlich stieß ich auf eine Bibliothek, die V8-Engine unterstützt (einschließlich der neuen Isolation API, die 90% der Bibliotheken, die ich fand, veraltet) und bietet große Exposition und Interaktion API.

https://github.com/QuartzTechnologies/v8bridge

Ich hoffe, dass meine Lösung jemand helfen.

0

Obwohl QML ist nicht genau Javascript, Qt ist nicht einfach in C++, aber was sie tun scheinen zusammen wie, was Sie brauchen

1

Es ist eine relativ neue Bibliothek für diese nbind genannt zu tun. Vielleicht würde das zu dir passen? Es sieht sehr gut aus und ich bin gerade dabei es zu benutzen.

+0

Schön, danke für den Kopf. Ich werde das später überprüfen, wenn ich etwas Zeit habe. –

Verwandte Themen