在Windows上创建一个node.js本地扩展。

20

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

我在哪里可以找到有关如何编译此类可执行文件的资源?我可以找到编写它的说明,但所有构建说明似乎都是针对Linux的。我可以通过mingw上的g++进行编译,不需要使用Visual Studio。另外,我在哪里找到需要编译扩展所需的头文件?

2个回答

27

我认为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
);

酷,我以前从未见过这个项目。 - JP Richardson
6
需要注意的是:**FFI 调用涉及的开销不容忽视。将硬编码绑定版本的 strtoul() 与 FFI 版本的 strtoul() 进行比较,可以发现本地硬编码绑定版本的运行速度要快 5 倍。因此不要仅仅因为 C 版本的函数运行更快就使用它们。FFI 调用的成本非常昂贵,因此在使用时一定要充分考虑。换句话说,偶尔调用本机 API 没问题,但如果你需要频繁调用本机函数,那么你需要编写自己的插件来避免 node-ffi 的显著开销。 - josh3736
为什么我看到输出的是中文字符? - Dimitrios Filippou

14

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


我自己也经历过这种痛苦。这是一份帮助我解决问题的指南(PDF)请记住,由于Node现在已经正式支持Windows,Visual Studio是Windows上Node的推荐构建工具。

基本上:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接