11

我有一个具有 C++ 后端和 HTML5/JS 前端的桌面应用程序。我们目前不得不使用 Google V8 或 Mac Webview 和 Objective-C 来允许 Javascript 和 C++ 进行通信。有没有办法让他们在没有中间件的情况下直接相互交谈?

试图完成:

  1. 共享变量。
  2. 从 C++ 调用函数到 JS。
  3. 从 JS 调用函数到 C++。

我试过用谷歌搜索,一切都指向上述解决方案。

4

5 回答 5

10

您可以尝试使用 Google 的协议缓冲区,它允许您创建编译为 C++ 对象的数据对象。然后,您可以使用他们wiki中的以下项目之一来将 protobuffers 与 javascript 一起使用:

于 2013-02-20T06:03:05.467 回答
5

你的软件听起来很像一个网络应用程序,中间没有互联网。在这种情况下, NodeJS可能会成为很好的中间件,您可以用 C++ 为它编写模块,并在 javascript 中使用它们。我自己还没有这样做。一个简短的例子:)

现在几年后我们有了Electron 项目,它基本上是上面的,但有一个基于 Chrome 的 web 视图。

于 2013-02-20T07:12:12.037 回答
2

我为此写了一个库

看看https://skywarpcpp.wordpress.com

用于 c++ 应用程序的 SKYWARP++ 数据流和 rpc 启用服务器库

你可以在 github 上下载

https://github.com/xjrueda/skywarp_cpp

于 2015-03-04T11:06:31.137 回答
2

你现在可以使用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 中使用。

于 2015-09-18T12:20:05.623 回答
1

请看这个,我是楼主

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

libjspp 允许 C++ 与 javascript spidermonkey 1.8.5 轻松连接和交互?同时不干扰 C++ 和 javascript 世界。对于希望以面向对象的方式嵌入和扩展 Javascript 的应用程序很有用。通过使用 C++ 模板,非常薄的界面几乎没有开销。

我是

于 2013-03-08T04:22:41.077 回答