在浏览器中使用c++ dll
Using C++ DLLs in a browser
我们有一个从一个巨大的c++项目生成的。dll库。我们希望在网络上公开它。
第一次尝试使用Emscripten。但我猜基于这个答案,不是每个库都可以与JavaScript链接。
我们想要的是一个客户端应用程序。原因是安全性和性能。该应用程序具有高度交互性,因此几乎不可能以客户机-服务器方式实现。安全性方面的原因是,作为交互的一部分,用户可以访问底层硬件资源,因此将其托管在服务器上是有风险的。
有什么办法能做到这一点吗?我只是想知道是否有其他可用的选项,或者使用Emscripten的解决方案是否可用。
p。S:我们有c++库的源代码,但代码本身使用了许多其他库。
一种可能的方法是通过c++绑定将DLL中的API公开给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代码很可能绑定到同一台机器上的端口,并处理来自您正在集成的应用程序的ajax请求或web套接字调用,然后将所需的内容转发给从DLL暴露的函数
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL