2012-08-17 87 views
7

我有一些C++代碼,我想暴露給Web應用程序的客戶端。理想情況下,我想爲我的C++類編寫Javascript包裝器對象,以便我可以在客戶端使用它們。Javascript C++綁定?

以前是否做過?有沒有人有鏈接,以顯示如何實現?

+0

服務器上是C++代碼嗎?如果不是,你如何得到客戶? – 2012-08-17 12:18:08

+0

我想他是在談論RMI。這將是客戶端上的自動生成的Javascript對象,這些對象與服務器上的C++代碼進行交談,並帶有一些他不必編寫的序列化機制。 – 2012-08-17 12:20:40

+0

@JohnWatts:是的,你說得對,它實際上是RMI。 C++庫將存在於服務器上,而Javascript類將提供一個API來與後端庫進行交互。 – 2012-08-17 12:22:48

回答

1

還有就是C++代碼轉換爲JavaScript庫,它可能會幫助:基於 emscripten

+0

是的,我昨天發現了這個。我已經下載並開始嘗試。似乎要走的路。 – 2012-08-18 08:25:30

+0

這仍然是首選的圖書館,還是有更現代的方法,你會推薦?我想知道@HomunculusReticulli現在也在使用什麼。我在這個問題中看到的唯一更新是在'14,提到github上的v8bridge。 – 2015-12-17 00:14:04

+1

@kayleeFrye_onDeck:我結束了使用emscripten。 HTH – 2015-12-17 10:55:15

0

我想你想要一個C++ JSON解析器。你應該可以在這裏找到一個http://www.json.org/。它可能不是你想要的,因爲它只是序列化和反序列化C++對象而沒有任何行爲,但它應該足夠好。參見https://stackoverflow.com/questions/245973/whats-the-best-c-json-parser進行一些討論。

+0

hm,JSON僅實現兩個組件之間交換的數據。我認爲OP在談論簡單的方法暴露/接口。 – Constantinius 2012-08-17 12:26:04

+0

@JohnWatts:這是一個很好的起點,但我不知道它是否適合我要做的事 - 哪一個是在瀏覽器中運行腳本 - 最主要的是腳本將使用「包裝」 C++對象。 – 2012-08-17 12:26:08

+0

@Constantinius:是的,你得到了我正在創造的點(當我輸入它!) – 2012-08-17 12:27:07

0

如果C++代碼必須在客戶端上,那麼沒有簡單的方法來爲Web應用程序執行此操作。解決方案可能涉及您想要支持的瀏覽器的編碼插件,然後可以從JavaScript代碼訪問它們。

例如,如果你需要這個客戶端應用程序,那是另一種情況。這樣的事情已經完成,並涉及到將應用程序鏈接到(或從外部運行)例如鉻庫或任何其他JavaScript執行引擎。這樣你就可以創建綁定到C++類並從JavaScript中使用這些對象,反之亦然。請注意,這也不是一個簡單的解決方案,可能是一個很大的努力來實現(也需要額外的資源)。

0

例如,您可以將C++類包裝爲PHP或Python,然後通過HTTP實現API以訪問所需的功能。

或者,如果你堅持要將函數暴露爲JavaScript,你可以嘗試使用Node.js,並創建一個C++加載項來包裝類。看到這裏的Node.js文檔:http://nodejs.org/api/addons.html#addons_wrapping_c_objects

但無論哪種方式,我不認爲應避免創建某種類型的API(HTTP SOAP,XML RPC)來訪問您的服務器上的功能。

+1

爲什麼使用額外的語言/框架?我確信有比使用其他依賴更直接的方法。 – Constantinius 2012-08-17 12:52:59

+0

我剛剛提到PHP和Python,因爲我認爲使用PHP或Python而不是JS來映射C++類更容易。 – nutrina 2012-08-17 13:06:50

+0

在JavaScript中需要它們時,映射類到PHP/Python的用途是什麼? – Constantinius 2012-08-17 13:08:10

0

我想RPC是你想要的。你需要使用某種框架將你的函數包裝在服務器端。我還沒有使用它,但this one看起來很有希望。

在客戶端,您使用代理對象來調度函數調用。通信通常通過XML-RPC或JSON-RPC進行處理。我用this client side framework,很滿意,但我相信你會find many others

1

Libjspp C++模板包裝嵌入和擴展Javascript引擎SpiderMonkey的1。 8。 5以及更多

SpiderMonkey?是Mozilla Project的Javascript/ECMAScript引擎。

Libjspp允許C++開發人員嵌入SpiderMonkey?簡單和容易地進入他們的應用。 Libjspp允許在同一個進程中運行多個Javascript引擎,每個線程都有一個引擎,可以實現真正的parallisim。而Libjspp也無法阻止用戶在引擎中運行多個線程。

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

+0

libjspp似乎是一個空的Git存儲庫。 – jjrv 2015-09-18 12:52:03

1

這是一個老託皮,但是,我是在確切的情況,現在,所有我在網絡上覆雜的或過時的發現解決方案。

最近,我碰到一個支持V8引擎的庫(包括新的隔離API,這使得我發現過時的庫有90%),並提供了良好的暴露和交互API。

https://github.com/QuartzTechnologies/v8bridge

我希望我的解決方案將幫助任何人。

0

雖然QML是不完全的Javascript,Qt不是普通的C++,但他們一起做表裏如一就像你需要什麼

1

有這樣做的叫nbind一個相對較新的庫。也許這會適合你?它對我來說看起來非常好,我即將開始使用它。

+0

很好,謝謝你的擡頭。稍後我會在稍後查看一下。 – 2017-07-18 08:43:37