c++ - 在浏览器中使用 C++ DLL

标签 c++ dll web-applications client-side emscripten

我们有一个从一个巨大的 C++ 项目生成的 .DLL 库。我们希望通过网络公开它。

第一次尝试是使用 Emscripten。但我猜基于This Answer ,并非每个库都可以与 JavaScript 链接。

我们想要的是一个客户端应用程序。原因是安全性和性能。该应用程序具有高度交互性,这使得它几乎不可能以客户端-服务器方式实现。安全原因是作为交互的一部分,用户可以访问底层硬件资源,因此将其托管在服务器上是有风险的。

有什么办法可以做到这一点吗?我只想知道是否还有其他可用选项,或者是否有使用 Emscripten 的解决方案。

P.S:我们有 C++ 库的源代码,但代码本身使用了许多其他库。

最佳答案

一种可能的方法是通过 C++ bindings 将 API 从您的 DLL 公开给 Node.js .考虑文档中的以下示例:

#include <node.h>

using namespace v8;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = Isolate::GetCurrent();
  HandleScope scope(isolate);
  args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}

void init(Handle<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(addon, init)

基本上,在 init 函数中,您可以将所有入口函数公开给您的 DLL,它可以进一步返回原始类型,如字符串、数字等,甚至是包装的 C++ 对象(但是到目前为止,我已经一直坚持使用原语以避免修改现有代码,只要你坚持使用原语类型,你只需要将 C++ 类型转换为 v8)。所以这个 C++ 代码将允许从 javascript 执行以下操作:

var object = require('./build/Release/addon');
console.log(addon.hello()); // 'world'

由于您需要与其他一些基于 Web 的应用程序通信,因此您的 node.js 代码很可能会绑定(bind)到同一台机器上的端口并处理来自您正在集成的应用程序的 ajax 请求或 Web 套接字调用,然后转发什么是从 DLL 公开的函数所必需的。

关于c++ - 在浏览器中使用 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32223638/

相关文章:

c++ - 阴影的窗口样式?

c++ - 创建要与 VB exe 一起使用的 Mingw DLL

windows - 从已编译的 DLL 中获取函数信息

c# - 一个web应用场景中NHibernate乐观并发的问题

java - 无需 Adob​​e 插件即可在 Web 中阅读 PDF 文件

c++11可变参数编程,如何定义 vector 塔

c++ - 记录线程 ID 的最后八个字符?

c++ - 我想念什么吗?

c# - VS 2010 : C# Project Cannot Open DLL

javascript - 如何链接到 iO 上的 "pinned to homescreen"Web 应用程序?