我们有一个从一个巨大的 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/