gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:47 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com