.net 本机扩展名 Node.js.
.net native extension for node.js
我想在node.js中使用.net dlls。这是否意味着我需要使用"clr hosting"使这些 dll 可用于 c/c++,就像
- .NET Framework 4 托管接口或
- 承载公共语言运行库
不幸的是,在github上创建nodejs本机.Net扩展的示例有点令人失望,只需向下滚动到最后一步
将"公共语言运行时支持"选项更改为无公共语言运行时支持
你知道我的意思。更正以使该文章公正:它建议仅针对文件SharpAddon.cpp
将该选项更改为"无公共语言运行时支持",以便您添加的其他.cpp文件将启用 CLR 支持(CLR 项目的默认值),这意味着您实际上可以使用其他.cpp文件中的 .net dll。
这个问题实际上是在 Node.js/serverside javascript 中使用 .NET DLL 的副本,它是在甚至没有原生 Windows 端口的节点的时候编写的,所以时代可能已经改变,尽管谷歌让我怀疑它。
更新:当binding.gyp
文件设置正确时,node-gyp 可以自动执行以下手动步骤。有关此简化过程,请参阅此答案。
事实证明,这很容易。在与 CLR 托管作斗争并将数据传入和传出主机一段时间后,事实证明您实际上可以为节点扩展启用/clr,没有问题(到目前为止)。方法如下:
- 按照 http://nodejs.org/api/addons.html 上的说明生成项目文件
- 在Visual Studio中打开生成的.sln(我在VS 2010上)并在项目设置中启用/clr
- 现在它可能不会构建,您必须让 - 在这种情况下实际上非常有用 - 错误消息引导您到与/clr 冲突的标志
我必须更改才能使其工作的标志:
- 禁用/EHsc(C++例外)
- 禁用/RTC1 和/RTCsu
- 版本:将/MT 更改为/MD
- 调试:将/MTd 更改为/MDd
- 发布:将/GR- 更改为/GR
然后,可以像这样混合托管和非托管代码,引用 .net dll。
#pragma managed
#using <managed.dll>
void callManaged()
{
managed::Class1^ c1 = gcnew managed::Class1();
System::String^ result = c1->Echo("hola");
System::Console::WriteLine("It works: " + result);
}
#pragma unmanaged
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
callManaged();
return scope.Close(String::New("world"));
}
更新 刚刚发现了这个链接,有一个简单的操作方法:http://joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/
听起来像边缘.js是iisnode作者的新答案:
Edge.js 支持使用 C# 和 .NET 而不是编写本机节点.js扩展
如今,有cmake-js和node-addon-api使事情变得更容易,加上node-addon-api的ABI意味着当与较新版本的Node.js一起使用时,不需要重新编译模块。
有关简短教程,请参阅此答案:https://stackoverflow.com/a/54339042/709537
- 在 ubuntu 上安装 node js pulsar 客户端
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 在 node.js 中将缓冲区从 C++ 转换为 UTF-8 字符串
- 使用 Node.js N-API 调用 C 函数时,不会显示预期的输出
- 如何使用 v8 本机插件将 C++ 数组交付到 Node.js
- C++ 和 node.js 之间的 RSA 加密
- node.js Nan:在函数C++调用 JavaScript 回调
- 迭代 Napi::对象属性(键)在 Node.js C++ N-API 中
- 上传大文件并解析时使用 Node.js v10.15.1 时出现致命错误
- 如何在 Node.js 中解压缩 c# 打包结构
- 使用 Node.js 调用child_process与从 C 调用子进程并创建C++绑定以从 node.js 调用
- 我们如何访问 Node.js 应用程序之外的内存?
- 我正在c 中的buidling node.js绑定
- 以有效的方式从 Node .js运行 C 或C++代码
- node.js:如何从C 模块中产生
- 如何编译 node.js for CentOS 6.10 (库问题)
- 如何使用 Node.js 开发一个侦听器来接收许多车辆跟踪数据(通过 TCP)
- 使用 N-API 将数据流式传输到 Node.js C++ 插件中
- 在构建Node.js/Node-webkit插件时,通过binding.gyp将.cpp文件编译为Objective-C
- 终端服务器上的IPC,带有一个nw.js/node.js/node-namemodule(C++)