2012-08-17 86 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