如何在网页上运行 C++ 应用程序?

Posted

技术标签:

【中文标题】如何在网页上运行 C++ 应用程序?【英文标题】:How to run C++ applications on a webpage? 【发布时间】:2011-08-27 16:18:39 【问题描述】:

是否有任何工具可以在标准 Web 浏览器上运行用 QT 编写的 C++ 应用程序?

我的 C++ 应用程序必须从网页运行,进行一些数学运算,然后将结果返回到网页。

【问题讨论】:

您想将 C++ 代码嵌入到 javascript 中(使用 C++ 到 JavaScript 的编译器,如 Emscripten),还是想使用浏览器插件? 【参考方案1】:

查看NaCl (Native Client)。没有 Qt,但你可以使用 c++。

【讨论】:

其实是这样的:labs.qt.nokia.com/2010/06/25/… 但不知道成熟到什么程度。 有趣的链接 (+1)。真的有用吗? 虽然 chrome 确实具有此功能并且高级程序员可以从中受益......我不知道这个答案对 OP 有帮助。 谢谢,我不知道 NaCl。但现在 NaCl 只适用于谷歌 Chrome 浏览器,缺乏社区,仍处于测试阶段。【参考方案2】:

你不能。当然,您可以使用 C++ 在 Web 应用程序中编写服务器端,但 Qt GUI 框架仅适用于在其运行的机器上显示其用户界面的应用程序。 (在远程 X11 连接等情况下通常需要注意,但这对 Web 应用程序没有帮助)。

【讨论】:

是否可以在 C++ 应用程序中进行数学运算,并通过 JavaFX 或类似的方式在 Web 浏览器中显示可视化部分? 您当然可以在服务器端使用 C++ 进行计算,并通过 Web 界面显示结果。您甚至可以使用 Qt 的非 GUI 部分来构建您希望的 C++ 应用程序,但您不能使用 Qt GUI 进行用户交互。我不太清楚 JavaFX 会给你买什么。一个普通的基于 JavaScript 的客户端 UI(您在服务器上生成图形等并将它们作为 PNG 传输)同样简单。 在我的情况下,将用 C++ 编写的计算代码放在客户端很重要,它的应用程序必须像智能客户端 i 一样运行。 e.:通过 Web http 连接交付应用程序 不需要安装(或提供自动安装) 无需用户操作即可自动更新 具有桌面应用程序的外观和感觉 现在有多个平台可以构建此类应用程序:Adobe Flash、JavaFX 和 Silverlight . JavaFX 只适合我的目的,但我不知道是否可以将它与 C++ 计算代码捆绑在一起。 我认为这些目标不能同时实现。甚至“桌面应用程序的外观和感觉”和“无需安装”听起来都是相互排斥的一对。再加上使用与“移动代码”生态系统相去甚远的语言(如 C++)的要求,您的工作肯定会完成。 你可以在 NaCL 中运行 Qt 是吗?【参考方案3】:

我已经阅读过这样的示例应用程序。我想你可以搜索“Qt WebKit Hybrid application”这个词。在该示例中,用户界面是用 html 和 Javascript 编写的,后端是用 C++ 编写的。甚至,C++ 对象的所有权也可以转移到 Javascript。我不确定我是否正确,但我部分正确。

编辑: 链接在这里。 https://developer.qt.nokia.com/wiki/Server-Driven_UI_with_Hybrid_QtWebkit

【讨论】:

感谢您的回答。 Qt WebKit 的使用是完全相反的解决方案,因为它允许 Web 内容与 C++ 集成并在 Qt 框架上执行。但我想在网页上执行 C++ 代码。 Qt WebKit 不是我所期望的,但我把目光放在这个工具上作为一种妥协。【参考方案4】:

可以使用 Emscripten 将 C++ 代码编译为 JavaScript,然后从 JavaScript as explained here 调用编译后的 C++ 函数。这将允许您在 Web 浏览器或其他 JavaScript 环境中运行 C++ 代码,而无需任何额外的插件。

【讨论】:

【参考方案5】:

还有一个解决方案,你可以写一个浏览器插件。我认为这比 ActiveX 和 NaCl 更好。有关如何编写插件的详细信息,请查看:How to write a C++ FireFox 3 plugin (not extension) on Windows?

【讨论】:

【参考方案6】:

也许您可以将代码嵌入到 ActiveX 控件中。

【讨论】:

ActiveX 不是跨平台工具。对我来说这很敏感。 在阅读了所有其他 cmets 之后,您似乎想要一个跨平台和跨浏览器的解决方案。所以唯一的选择是将 C++ 代码翻译成 Javascript。如果您的代码只做一些数学运算,则应该可以将其转换为 Javascript。 问题是我的应用程序对执行时间很敏感。它是一个具有大量数学运算的实时视频处理器,并且广泛使用第三方 C++ 库。将我的应用程序转移到 Javascript 框架来进行数学计算是不可能的。但是谢谢你了。 我刚刚有了同样的想法,拥有一个可以在浏览器跨平台中呈现/使用的 QT 表示层。 ActiveX 实际上会以原生方式运行,嵌入到 Web 浏览器框架中。

以上是关于如何在网页上运行 C++ 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现js写的网页将参数传到服务器,然后服务器调用C++程序?

如何分析在 Windows 上运行的 C++ 代码?

使用URI Scheme实现从web网页上打开本地C++应用程序

用c++写一个打开网页的小程序?

如何分析在 Linux 上运行的 C++ 代码?

如何通过使用 C、C++ 在 Linux 上指定其名称以编程方式检查特定守护程序是不是正在运行?