2012-03-08 21 views
20

Estoy intentando acceder a una llamada API de Windows nativa particular desde una aplicación node.js. Creo que la mejor manera de hacerlo es crear una extensión/complemento nativo al nodo que pueda requerir en mi aplicación node.js y llamar desde JavaScript.Crear una extensión nativa de node.js en Windows

¿Dónde puedo encontrar recursos sobre cómo compilar realmente este tipo de ejecutable? Puedo encontrar instrucciones sobre cómo escribirlo, pero todas las instrucciones de compilación parecen ser para Linux. Estoy bien con la compilación a través de g ++ en mingw, no necesito usar Visual Studio. Además, ¿dónde encuentro los archivos de encabezado que necesito para compilar la extensión?

Respuesta

26

Creo que node-ffi te ayudará. Es simple y funciona.

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

fresca, que nunca he visto antes este proyecto. –

+5

Importante tener en cuenta: * Hay una sobrecarga no trivial asociada con las llamadas FFI. Comparando una versión de enlace rígida de 'strtoul()' a una versión de FFI de 'strtoul()' muestra que el enlace nativo codificado duro es ** 5x ** más rápido. Así que no uses la versión C de una función solo porque es más rápida. Hay un costo significativo en las llamadas FFI, así que haz que valga la pena. * En otras palabras, esto está bien para llamadas ocasionales a una API nativa, pero si vas a hacer muchas llamadas nativas, vas a tiene que escribir su propio complemento para evitar la sobrecarga significativa de node-ffi. – josh3736

+0

¿Por qué veo caracteres chinos como salida? –

14

Esto ahora está desactualizado. Hoy, use nan y node-gyp para escribir y compilar módulos nativos que funcionen en todas las plataformas.


He pasado por este dolor yo mismo. Here's a guide that helped me get it working. (PDF) Recuerde que, dado que Node ahora es oficialmente compatible con Windows, Visual Studio es la herramienta de compilación recomendada para Node en Windows.

Básicamente:

  • Download y construir el código fuente Nodo. (Ver PDF)
  • Cree una nueva solución VC++ Win32 en VS, seleccionando DLL como el tipo de aplicación en el asistente que sigue. Asegúrese de que ATL/MFC esté desmarcado.
  • Escriba su complemento. Como ejemplo, here's one I wrote that gets Windows' current DNS settings. Específicamente, el project's settings file (vcxproj) será de interés ya que una de las partes más difíciles es obtener todas las referencias bibliográficas/rutas de inclusión configuradas. Es posible que desee tomar prestada mi configuración y reemplazar D:\node\ con la ubicación de su repositorio de nodo.
Cuestiones relacionadas