2012-06-29 11 views
16

मैं node.js. में .NET dlls का उपयोग करना चाहता हूं। इसका मतलब यह है कि मैं उन DLLs के साथ C/C++ 'clr होस्टिंग' का उपयोग कर उपलब्ध बनाने के लिए, से अधिक की जरूरत है एक ला। Node.js के लिए नेट मूल एक्सटेंशन

दुर्भाग्य उदाहरण Creating a nodejs native .Net extension GitHub पर एक था एक निराशा का सा, बस

बदलें "साझा भाषा क्रम समर्थन" विकल्प अंतिम चरण के लिए नीचे स्क्रॉल नहीं आम लैन के लिए गेज रनटाइम समर्थन

और आप जानते हैं कि मेरा क्या मतलब है। उस आलेख न्याय को सुधारने के लिए सुधार: यह सुझाव है कि "कोई सामान्य भाषा रनटाइम समर्थन" केवल SharpAddon.cpp फ़ाइल के लिए बदलने के लिए सुझाव देता है, इसलिए आपके द्वारा जोड़े गए अन्य .cpp-files में सीएलआर समर्थन सक्षम होगा (सीएलआर प्रोजेक्ट के लिए डिफ़ॉल्ट), जिसका अर्थ है कि आप वास्तव में उन अन्य .cpp फ़ाइलों से .NET dlls का उपयोग कर सकते हैं।

यह प्रश्न वास्तव में Using a .NET DLL in Node.js/serverside javascript का डुप्लिकेट है, जो उस समय लिखा गया था जब नोड के मूल विंडोज पोर्ट भी नहीं थे, इसलिए समय बदल सकता है, हालांकि Google मुझे शक करता है।

+0

यह बताने के लिए अगर यह सक्रिय रूप से विकसित किया जा रहा है/बनाए रखा मुश्किल है, लेकिन यदि आप Node.js के साथ 100% संगतता की जरूरत नहीं है, यह दिलचस्प लग रहा है: हिंदुस्तान टाइम्स tp: //newcome.wordpress.com/2010/05/08/node-net-node-js-implemented-in-javascript-on-the-net-runtime/। – reuben

+0

@reuben लिंक के लिए धन्यवाद, लेकिन हाथ में समस्या के लिए मैं सबसे स्थिर और निष्पादन कार्यान्वयन संभव बनाना चाहता हूं, इसलिए मुझे लगता है कि मैं मूल के साथ फंस गया हूं, जिसे वास्तव में तेज गति से विकसित किया जा रहा है और यह भी हो रहा है हाल ही में विंडोज मंच पर भाप। –

उत्तर

11

अद्यतन: नोड ढकोसला नीचे मैनुअल चरणों कर सकते हैं स्वचालित रूप से जब binding.gyp फ़ाइल सेटअप ठीक है। इस सरलीकृत प्रक्रिया के लिए this answer देखें।


यह पता चला बल्कि आसान होने के लिए। सीएलआर होस्टिंग के साथ संघर्ष करने और थोड़ी देर के लिए होस्ट के अंदर और बाहर डेटा प्राप्त करने के बाद, यह बाहर निकलता है, आप वास्तव में अपने नोड एक्सटेंशन के लिए सक्षम/क्लिप कर सकते हैं कोई समस्या नहीं (अब तक)।

  • http://nodejs.org/api/addons.html पर निर्देशों का पालन प्रोजेक्ट फ़ाइलें
  • दृश्य स्टूडियो (मैं VS 2010 पर हूँ) में .sln उत्पन्न खुला पैदा करते हैं और
  • अब परियोजना सेटिंग्स में/CLR सक्षम करने के लिए यहां तरीका देखें: वास्तव में इस मामले में काफी उपयोगी - - यह शायद का निर्माण करेगा नहीं और आप यह बताने के लिए है त्रुटि संदेश झंडे के लिए मार्गदर्शन के साथ/CLR

झंडे कि मैं यह काम करने के लिए बदलना पड़ा संघर्ष:

  • अक्षम/EHsc (सी ++ अपवाद)
  • अक्षम/RTC1 और/RTCsu
  • रिलीज: परिवर्तन/मीट्रिक टन करने के लिए/एमडी
  • डीबग: परिवर्तन/MTD के लिए/MDD
  • रिलीज: परिवर्तन/जीआर -/जीआर

फिर आप अपने .NET dlls का संदर्भ देकर प्रबंधित और अप्रबंधित कोड को मिश्रित कर सकते हैं।

Edge.js सी # और .NET का उपयोग कर समर्थन करता है: http://joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/

+0

+1 अच्छा। अब मेरे पास node.js के लिए देशी एक्सटेंशन लिखने का एक और तरीका है और नेट – Viet

+0

@Viet की शक्ति का आनंद लें, इसे ध्यान में रखा जाना चाहिए, हालांकि मूल/सीएलआर सीमा पार करने पर हर बार लागत होती है - और यह इस पर निर्भर करता है कितनी बार * देशी * * .net * (या दूसरी तरफ) में कॉल करता है। वह लागत कितनी अधिक है, मैंने अभी तक मापन नहीं किया है। –

+0

नोट के लिए धन्यवाद। एक बार जब आप प्रोफाइलर के माध्यम से प्रोग्राम चलाते हैं, तो आप अपने ब्लॉग पर भी निष्कर्ष साझा करना चाह सकते हैं – Viet

5

edge.js की तरह लगता है iisnode के लेखक की ओर से नई जवाब है:

#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 के साथ इस कड़ी की खोज बजाय देशी Node.js एक्सटेंशन लिखने के

संबंधित मुद्दे