2012-03-08 14 views
20

Sto provando ad accedere a una particolare chiamata API Windows nativa da un'applicazione node.js. Credo che il modo migliore per farlo sia creare un'estensione/addon nativa al nodo che posso richiedere nella mia applicazione node.js e chiamare da JavaScript.Creare un'estensione nativa node.js su Windows

Dove posso trovare le risorse su come compilare questo tipo di eseguibile? Posso trovare le istruzioni su come scriverlo, ma tutte le istruzioni di costruzione sembrano essere per Linux. Sto bene con la compilazione di g ++ su mingw, non ho bisogno di usare Visual Studio. Inoltre, dove trovo i file header di cui ho bisogno per compilare l'estensione?

risposta

26

Penso che node-ffi ti aiuterà. È semplice e funziona.

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

fresco, non ho mai visto in precedenza. –

+5

Importante notare: * Vi è un overhead non banale associato alle chiamate FFI. Confrontando una versione di codifica hard-coded di 'strtoul()' in una versione FFI di 'strtoul()' mostra che il bind hard-coded nativo è ** 5x ** più veloce. Quindi non usare la versione C di una funzione solo perché è più veloce. C'è un costo significativo nelle chiamate FFI, quindi fatelo valere. * In altre parole, questo va bene per le chiamate occasionali a un'API nativa, ma se avete intenzione di fare molte chiamate native, avete intenzione di devi scrivere il tuo addon per evitare l'overhead significativo di node-ffi. – josh3736

+0

Perché vedo i caratteri cinesi come output? –

14

Questo è ormai obsoleto. Oggi, utilizza nan e node-gyp per scrivere e creare moduli nativi che funzionano su piattaforme diverse.


Ho passato questo dolore da solo. Here's a guide that helped me get it working. (PDF) Ricorda che dal momento che il nodo è ufficialmente supportato su Windows, Visual Studio è lo strumento di creazione consigliato per Node su Windows.

In sostanza:

  • Download e costruire il codice sorgente del nodo. (Vedi PDF)
  • Creare una nuova soluzione VC++ Win32 in VS, selezionando DLL come tipo di applicazione nella procedura guidata che segue. Assicurarsi che ATL/MFC sia deselezionato.
  • Scrivi il tuo addon. Ad esempio, here's one I wrote that gets Windows' current DNS settings. Nello specifico, lo project's settings file (vcxproj) sarà interessante poiché una delle parti più difficili sta ricevendo tutti i riferimenti bibliografici/include i percorsi impostati. Potrebbe essere necessario prendere in prestito la mia configurazione e sostituire D:\node\ con il percorso del repository del nodo.
Problemi correlati