2013-02-20 210 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。