Подтвердить что ты не робот

Создайте собственное расширение node.js для Windows

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

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

4b9b3361

Ответ 1

Я думаю, 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
);

Ответ 2

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


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

В принципе:

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