2012-03-08 15 views
20

पर एक node.js देशी एक्सटेंशन बनाएं I node.js एप्लिकेशन के भीतर से किसी विशेष मूल Windows API कॉल तक पहुंचने का प्रयास कर रहा हूं। मेरा मानना ​​है कि ऐसा करने का सबसे अच्छा तरीका नोड में देशी एक्सटेंशन/एडन बनाना है जिसे मुझे अपने node.js एप्लिकेशन में और जावास्क्रिप्ट से कॉल करने की आवश्यकता हो सकती है।विंडोज

मुझे इस तरह के निष्पादन योग्य तरीके से संकलित करने के तरीकों पर संसाधन कहां मिल सकता है? मैं इसे लिखने के निर्देशों को पा सकता हूं, लेकिन सभी निर्माण निर्देश लिनक्स के लिए प्रतीत होते हैं। मैं mingw पर g ++ के माध्यम से संकलन के साथ ठीक हूं, मुझे विजुअल स्टूडियो का उपयोग करने की आवश्यकता नहीं है। साथ ही, एक्सटेंशन को संकलित करने के लिए मुझे हेडर फाइलें कहां मिलती हैं?

उत्तर

26

मुझे लगता है कि node-ffi आपकी मदद करेगा। यह आसान है और यह काम करता है।

npm install ffi 
var FFI = require('ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'MessageBoxW': [ 
     'int32', [ 'int32', 'string', 'string', 'int32' ] 
    ] 
}); 

var OK_or_Cancel = user32.MessageBoxW(
    0, TEXT('I am Node.JS!'), TEXT('Hello, World!'), 1 
); 
+0

कूल, मैं इस परियोजना से पहले कभी नहीं देखा। –

+5

ध्यान देने योग्य है: * एफएफआई कॉल से जुड़े गैर-तुच्छ ओवरहेड है। 'Strtoul()' के एक एफएफआई संस्करण में 'strtoul() 'के हार्ड-कोडित बाध्यकारी संस्करण की तुलना से पता चलता है कि देशी हार्ड-कोडित बाइंडिंग ** 5x ** तेज है। इसलिए केवल एक फ़ंक्शन के सी संस्करण का उपयोग न करें क्योंकि यह तेज़ है। एफएफआई कॉल में एक महत्वपूर्ण लागत है, इसलिए उन्हें इसके लायक बनाएं। * दूसरे शब्दों में, यह मूल एपीआई को कभी-कभार कॉल करने के लिए ठीक है, लेकिन यदि आप बहुत सारी मूल कॉल करने जा रहे हैं, तो आप जा रहे हैं नोड-एफएफआई के महत्वपूर्ण ओवरहेड से बचने के लिए अपना खुद का एडन लिखना होगा। – josh3736

+0

मैं चीनी वर्णों को आउटपुट के रूप में क्यों देखूं? –

14

यह अब पुराना है। आज, प्लेटफॉर्म पर काम करने वाले देशी मॉड्यूल लिखने और बनाने के लिए nan और node-gyp का उपयोग करें।


मैं इस दर्द से खुद चला गया हूं। Here's a guide that helped me get it working. (PDF) याद रखें कि चूंकि अब नोड को आधिकारिक तौर पर विंडोज पर समर्थित किया गया है, इसलिए विजुअल स्टूडियो विंडोज पर नोड के लिए अनुशंसित निर्माण उपकरण है।

मूल रूप से

:

  • Download और नोड स्रोत कोड का निर्माण। (पीडीएफ देखें)
  • वीएस में एक नया वीसी ++ विन 32 समाधान बनाएं, डीएलएल का चयन करने वाले विज़ार्ड में एप्लिकेशन प्रकार के रूप में चयन करें। सुनिश्चित करें कि एटीएल/एमएफसी अनचेक है।
  • अपना एडन लिखें। उदाहरण के तौर पर, here's one I wrote that gets Windows' current DNS settings। विशेष रूप से, project's settings file (vcxproj) ब्याज की बात होगी क्योंकि सबसे कठिन भागों में से एक पुस्तकालय संदर्भ/पथ स्थापित किए जा रहे हैं। आप मेरी कॉन्फ़िगरेशन उधार लेना चाहते हैं और अपने नोड रेपो के स्थान के साथ D:\node\ को प्रतिस्थापित करना चाहते हैं।