Создать собственное расширение node.js в Windows - PullRequest
20 голосов
/ 09 марта 2012

Я пытаюсь получить доступ к определенному вызову Windows API изнутри приложения node.js.Я считаю, что лучший способ сделать это - создать собственное расширение / дополнение к узлу, которое мне может потребоваться в моем приложении node.js, и вызывать из JavaScript.

Где я могу найти ресурсы о том, как на самом делескомпилировать этот вид исполняемого файла?Я могу найти инструкции по его написанию, но все инструкции по сборке, похоже, для Linux.Я в порядке с компиляцией через g ++ на mingw, мне не нужно использовать Visual Studio.Кроме того, где я могу найти заголовочные файлы, которые мне нужны для компиляции расширения?

Ответы [ 2 ]

26 голосов
/ 09 марта 2012

Я думаю 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
);
14 голосов
/ 09 марта 2012

Это сейчас устарело. Сегодня для написания и создания собственных модулей, работающих на разных платформах, используйте nan и node-gyp .


Я сам прошел через эту боль. Вот руководство, которое помогло мне заставить его работать. (PDF) Помните, что поскольку Node теперь официально поддерживается в Windows, Visual Studio является рекомендуемым средством сборки для Node в Windows.

В основном:

  • Загрузите и создайте исходный код узла. (См. PDF)
  • Создайте новое решение VC ++ Win32 в VS, выбрав DLL в качестве типа приложения в следующем мастере. Убедитесь, что ATL / MFC не отмечен.
  • Напишите свой аддон. Например, вот тот, который я написал, который получает текущие настройки DNS Windows . В частности, файл настроек проекта (vcxproj) будет интересен, поскольку одна из самых сложных частей - это получение всех ссылок на библиотеки / пути включения. Возможно, вы захотите позаимствовать мой конфиг и заменить D:\node\ на местоположение вашего репозитория Node.
...