我正在尝试从node.js应用程序中访问特定的本地Windows API调用。我相信最好的方法是创建一个可以在我的node.js应用程序中require并从JavaScript调用的本机扩展/插件。
我在哪里可以找到有关如何编译此类可执行文件的资源?我可以找到编写它的说明,但所有构建说明似乎都是针对Linux的。我可以通过mingw上的g++进行编译,不需要使用Visual Studio。另外,我在哪里找到需要编译扩展所需的头文件?
我正在尝试从node.js应用程序中访问特定的本地Windows API调用。我相信最好的方法是创建一个可以在我的node.js应用程序中require并从JavaScript调用的本机扩展/插件。
我在哪里可以找到有关如何编译此类可执行文件的资源?我可以找到编写它的说明,但所有构建说明似乎都是针对Linux的。我可以通过mingw上的g++进行编译,不需要使用Visual Studio。另外,我在哪里找到需要编译扩展所需的头文件?
我认为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
);
这已经过时了。今天,使用nan和node-gyp编写和构建可跨平台工作的本地模块。
我自己也经历过这种痛苦。这是一份帮助我解决问题的指南(PDF)请记住,由于Node现在已经正式支持Windows,Visual Studio是Windows上Node的推荐构建工具。
基本上:
D:\node\
替换为您的Node存储库的位置。
strtoul()
与 FFI 版本的strtoul()
进行比较,可以发现本地硬编码绑定版本的运行速度要快 5 倍。因此不要仅仅因为 C 版本的函数运行更快就使用它们。FFI 调用的成本非常昂贵,因此在使用时一定要充分考虑。换句话说,偶尔调用本机 API 没问题,但如果你需要频繁调用本机函数,那么你需要编写自己的插件来避免 node-ffi 的显著开销。 - josh3736