2012-06-29 18 views
16

Quiero hacer uso de .net dlls en node.js. ¿Eso quiere decir que tengo que hacer esos archivos DLL disponible con C/C++ usando 'de alojamiento CLR', a laextensión nativa .net para node.js

Desafortunadamente el ejemplo Creating a nodejs native .Net extension encima en github era una un poco decepcionante, solo desplácese hacia abajo al último paso

Cambie la opción "Common Language Runtime Support" a No Common Lan guage RunTime Support

y usted sabe a qué me refiero. Corrección para hacer justicia a ese artículo: sugiere cambiar esa opción a "No Common Language RunTime Support" solo para el archivo SharpAddon.cpp, por lo que otros archivos .cpp que agregue tendrán habilitado CLR (el valor predeterminado para un proyecto CLR), lo que significa que de hecho puede usar .net dlls de esos otros archivos .cpp.

Esta pregunta es en realidad un duplicado de Using a .NET DLL in Node.js/serverside javascript, que se escribió en un momento en que ni siquiera había un puerto de nodo nativo de Windows, por lo que los tiempos podrían haber cambiado, aunque google me hace dudar de ello.

+0

Es difícil saber si se está desarrollando/manteniendo activamente, pero si no necesitas compatibilidad al 100% con node.js, esto parece interesante: ht tp: //newcome.wordpress.com/2010/05/08/node-net-node-js-implemented-in-javascript-on-the-net-runtime/. – reuben

+0

@reuben Gracias por el enlace, pero por el problema que tengo entre manos, quiero tener la implementación más estable y eficiente posible, así que supongo que estoy atascado con el original, que se está desarrollando a un ritmo realmente rápido y que también está obteniendo vapor en la plataforma de Windows recientemente. –

Respuesta

11

Actualización: node-gyp puede realizar los siguientes pasos manuales automáticamente cuando el archivo binding.gyp está configurado correctamente. Ver this answer para este procedimiento simplificado.


Resultó ser bastante fácil. Después de luchar con CLR hosting y obtener datos dentro y fuera del host por un tiempo, resulta que puede habilitar/clr para su extensión de nodo sin problema (hasta ahora). Así es como:

  • siga las instrucciones en http://nodejs.org/api/addons.html para generar los archivos de proyecto
  • abrir la .sln generados en Visual Studio (estoy en VS 2010) y activar/CLR en la configuración del proyecto
  • ahora probablemente no se compile y debe permitir que el mensaje de error lo guíe hasta las banderas que entren en conflicto con/clr

Las banderas que tuve que cambiar para que funcionen:

  • desactivar (excepciones de C++)/EHsc
  • desactivar/RTC1 y/RTCsu
  • de salida:/cambio de MT a/MD
  • Depuración:/cambio de MTd a/MDd
  • de salida: cambio/GR - a/GR

Luego puede mezclar código administrado y no administrado como este, haciendo referencia a su .net dlls.

#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")); 
} 

actualización acaba de descubrir este enlace con un howto fácil: http://joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/

+0

+1 agradable. Ahora tengo una forma más de escribir la extensión nativa para node.js y disfrutar del poder de .Net – Viet

+0

@Viet Debe tenerse en cuenta que cruzar el límite nativo/CLR tiene un costo cada vez que lo hace, y eso depende de con qué frecuencia * native * llama a * .net * (o al revés). Qué tan alto es ese costo, aún no lo he medido. –

+0

Gracias por la nota. Una vez que ejecutas el programa a través del generador de perfiles, es posible que desees compartir los hallazgos también, como en tu blog – Viet

5

Suena como edge.js es la nueva respuesta del autor de iisnode:

Edge.js admite el uso de C# y .NET en lugar de escribir extensiones node.js nativas

Cuestiones relacionadas