2013-02-20 121 views
5

我有一個桌面應用程序,它具有C++後端和HTML5/JS前端。我們目前不得不使用Google V8或Mac Webview和Objective-C來允許Javascript和C++進行通信。有沒有辦法讓他們直接對話而不用中間件?Javascript與C++溝通

試圖完成:

  1. 共享變量。
  2. 從C++調用函數到JS。
  3. 從JS調用函數到C++。

我曾試着用搜索引擎這一切都指向上述解決方案。

+0

HTTP RPC接口?給出一個從C++調用JS函數的例子。 – Aesthete 2013-02-20 06:03:32

+0

我不明白。如果實際後端以C++編碼,爲什麼不編譯它並從服務器上的某個中間件端點調用它?中間件可以是任何允許您執行編譯的二進制文件的語言嗎? – Vinay 2013-02-20 06:04:22

+0

如果我正確理解你,你想要一個C++中間件? – Vinay 2013-02-20 06:05:47

回答

5

你可以嘗試使用谷歌的Protocol Buffers,它允許你創建一個被編譯到C++對象的數據對象。然後,您可以使用下面的項目之一,從他們的wiki使用protobuffers使用javascript:

+0

這是如何在瀏覽器和應用程序之間調用函數和共享變量的。 – Aesthete 2013-02-20 06:08:08

+0

這看起來很有希望。謝謝 – Rob 2013-02-20 06:08:52

3

你的軟件聽起來很像一個web應用程序,沒有互聯網中間。在這種情況下,NodeJS可能會成爲很好的中間件,您可以在C++中使用write modules,並在javascript中使用它們。我自己還沒有這樣做過。一個short example :)

現在幾年層我們有Electron project,這基本上是上面,但與基於Chrome網絡視圖。

0

請看看這個,我是主人

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

libjspp可以輕鬆接口&的C++與JavaScript的SpiderMonkey 1.8.5互動? 非侵入性C++ & javascript世界在同一時間。 對於想要嵌入的應用程序很有用&以面向對象的方式擴展Javascript。通過使用C++模板,非常細的界面實際上沒有開銷。

1

您現在可以使用Electron得到基本直接訪問Node.js的API一個Chrome網絡瀏覽器。然後,您可以使用nbind輕鬆地從JavaScript調用C++代碼。這種方式共享相同的線程和堆。

您可以通過添加這樣的一個C++ 11的源文件中聲明的C++類:

NBIND_CLASS(X) { 
    construct<int, int>(); 

    method(Y); 
    method(Z); 
} 

,對於一類X有一個構造函數取2個整數和方法,Y和Z與漂亮創建綁定很多任何類型的參數和可選的返回值。

nbind附帶一個示例,說明如何將C++代碼打包到Node.js插件中,以用於Electron。