在Windows上创建node.js本机扩展

Tim*_*ong 20 javascript windows native add-on node.js

我正在尝试从node.js应用程序中访问特定的本机Windows API调用.我相信最好的方法是创建一个本机扩展/插件到节点,我可以在我的node.js应用程序中要求并从JavaScript调用.

我在哪里可以找到有关如何实际编译此类可执行文件的资源?我可以找到有关如何编写它的说明,但所有构建说明似乎都适用于Linux.我很好用mingw编译g ++,我不需要使用Visual Studio.另外,在哪里可以找到编译扩展所需的头文件?

Vad*_*hev 26

我认为node-ffi会对你有所帮助.它很简单,而且很有效.

npm install ffi
Run Code Online (Sandbox Code Playgroud)
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
);
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的重要事项:*FFI调用会产生非平凡的开销.将`strtoul()`的硬编码绑定版本与`strtoul()`的FFI版本进行比较表明,本机硬编码绑定的速度提高了**5倍**.因此,不要仅仅因为它更快而使用C版本的函数.FFI调用的成本很高,所以让它们值得.*换句话说,这对于偶尔调用本机API很好,但是如果你打算做很多原生调用,你会去必须编写自己的插件以避免node-ffi的显着开销. (5认同)

jos*_*736 14

这已经过时了.今天,使用nannode-gyp编写和构建跨平台工作的本机模块.


我自己也经历过这种痛苦. 这是一个帮助我实现它的指南.(PDF) 请记住,由于Node现在在Windows上得到官方支持,因此Visual Studio是Windows上Node的推荐构建工具.

基本上:

  • 下载并构建Node源代码.(见PDF)
  • 在VS中创建一个新的VC++ Win32解决方案,在随后的向导中选择DLL作为应用程序类型.确保未选中ATL/MFC.
  • 写你的插件.举个例子,我写的这个是Windows当前的DNS设置.具体来说,项目的设置文件(vcxproj)将是令人感兴趣的,因为其中一个最棘手的部分是设置所有库引用/包含路径.您可能想借用我的配置并替换D:\node\您的Node repo的位置.