.net本地扩展为node.js
我想在node.js中使用.net dll。 这是否意味着我需要使用c / c ++使用'clr hosting',la
- .NET Framework 4托pipe接口或
- 承载公共语言运行时
不幸的是,在github上创build一个nodejs原生.Net扩展的例子有点令人失望,只是向下滚动到最后一步
将“通用语言运行时支持”选项更改为无公共语言运行时支持
你知道我的意思 更正这篇文章正义:它build议将该选项更改为“No Common Language RunTime Support” 仅用于SharpAddon.cpp
文件 ,因此您添加的其他.cpp文件将启用CLR支持(默认为CLR项目) ,这意味着你可以使用其他.cpp文件中的.net dll。
这个问题实际上是在Node.js / serverside javascript中使用.NET DLL的一个副本,当时甚至没有一个本地的Windows端口节点,所以时间可能已经改变,尽pipe谷歌让我怀疑它。
更新 :当binding.gyp
文件设置正确时,node-gyp可以自动执行下面的手动步骤。 看到这个简单的程序的答案 。
原来相当简单。 经过CLR托pipe和数据进出主机一段时间后,事实certificate, 你可以实际上启用/ clr你的节点扩展没有问题 (到目前为止)。 就是这样:
- 请按照http://nodejs.org/api/addons.html上的说明生成项目文件
- 在Visual Studio中打开生成的.sln(我在VS 2010上)并在项目设置中启用/ clr
- 现在它可能不会build立,你必须让 – 在这种情况下,实际上很有帮助 – 错误消息引导你到与/ clr冲突的标志
我不得不改变标志,使其工作:
- 禁用/ EHsc(C ++exception)
- 禁用/ RTC1和/ RTCsu
- 发布:将/ MT更改为/ MD
- debugging:将/ MTd更改为/ MDd
- 发布:更改/ GR-到/ GR
然后你可以像这样混合pipe理和非托pipe的代码,引用你的.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")); }
更新刚刚发现这个链接与一个简单的howto: http : //joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/
听起来像edge.js是iisnode作者的新答案:
Edge.js支持使用C#和.NET,而不是编写本地node.js扩展