.net для node.js - программирование

.net для node.js

Я хочу использовать DLL.net в node.js. Означает ли это, что мне нужно сделать эти dll доступными с помощью c/С++, используя "clr hosting", a la

К сожалению, пример Создание расширения .Net-расширения nodejs в github было немного разочарование, просто прокрутите вниз до последнего шага

Измените параметр "Поддержка времени обычного языка" на No Common Language RunTime Support

и вы понимаете, что я имею в виду. Исправление для обеспечения справедливости в этой статье: предлагается изменить этот вариант на "Без поддержки обычного языка RunTime" только для файла SharpAddon.cpp поэтому в других добавленных .cpp файлах будет включена поддержка CLR (по умолчанию для проекта CLR), что означает, что вы действительно можете использовать DLL файлы .net из этих других .cpp файлов.

Этот вопрос на самом деле является дубликатом Использование .NET DLL в javascript node.js/serverside, который был написан в то время, когда не было даже родной порт Windows node, поэтому времена могут измениться, хотя google заставляет меня сомневаться в этом.

4b9b3361

Ответ 1

Обновить: node -gyp автоматически выполнит шаги, указанные ниже, когда файл binding.gyp настроен правильно. См. этот ответ для этой упрощенной процедуры.


Это оказалось довольно легко. После боев с хостингом CLR и получения данных в хосте и из него некоторое время оказывается, что вы действительно можете включить /clr для вашего расширения node без проблем (пока). Вот как:

  • следуйте инструкциям http://nodejs.org/api/addons.html для создания файлов проекта.
  • откройте созданный .sln в Visual Studio (я на VS 2010) и включите /clr в настройках проекта.
  • теперь он, вероятно, не будет создан, и вы должны позволить - в этом случае на самом деле весьма полезно - сообщения об ошибках направляют вас к флагам, которые конфликтуют с /clr

Флаги, которые мне пришлось изменить, чтобы они работали:

  • disable/EHsc (исключения С++)
  • disable/RTC1 и /RTCsu
  • Релиз: изменить /MT на/MD
  • Отладка: изменение /MTd в/MDd
  • Релиз: изменение /GR - to/GR

Затем вы можете смешать управляемый и неуправляемый код, как это, ссылаясь на ваши DLL файлы .net.

#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: http://joseoncode.com/2012/04/10/writing-your-first-native-module-for-node-dot-js-on-windows/

Ответ 2

Похоже, что edge.js - это новый ответ от автора iisnode:

Edge.js поддерживает использование С# и .NET вместо написания внутренних node.js расширений

Ответ 3

В наши дни есть cmake-js и node-addon-api, которые облегчают работу, а также ABI node-addon-api означает, что модуль не нужно перекомпилировать при использовании с более новой версией Node.js.

Посмотрите этот ответ для краткого учебника: fooobar.com/info/325498/...