如何使用ffi将WinApi函数加载到Node.js中?

有一个名为ffi的库,允许用户加载系统本地库和调用它们中的函数。

使用他们的例子,我尝试使用位于User32.dll中的MessageBox函数:

 var ref = require('ref'); var ffi = require('ffi'); var Struct = require('ref-struct'); // Define Winapi types according to // https://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx var winapi = {}; winapi.void = ref.types.void; winapi.PVOID = ref.refType(winapi.void); winapi.HANDLE = winapi.PVOID; winapi.HWND = winapi.HANDLE; winapi.WCHAR = ref.types.char; winapi.LPCWSTR = ref.types.CString; winapi.UINT = ref.types.uint; // Try to load message box function as defined in // https://msdn.microsoft.com/en-us/library/windows/desktop/ms645505%28v=vs.85%29.aspx var current = ffi.Library("user32.dll", { 'MessageBox': [ 'int', [ winapi.HWND, winapi.LPCWSTR, winapi.LPCWSTR, winapi.UINT ] ] }); current.MessageBox(0, "sss", "sss", 0); 

这失败了一个错误:

 C:\MYSELF\programing\nodejs\node_modules\ffi\lib\dynamic_library.js:112 throw new Error('Dynamic Symbol Retrieval Error: ' + this.error()) ^ Error: Dynamic Symbol Retrieval Error: Win32 error 127 at DynamicLibrary.get (C:\MYSELF\programing\nodejs\node_modules\ffi\lib\dynamic_library.js:112:11) at C:\MYSELF\programing\nodejs\node_modules\ffi\lib\library.js:50:19 at Array.forEach (native) at Object.Library (C:\MYSELF\programing\nodejs\node_modules\ffi\lib\library.js:47:28) at Object.<anonymous> (C:\MYSELF\programing\nodejs\ffitest\winapi.js:23:19) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) 

我试图改变一些废话的声明,我得到了同样的错误,所以我想这是错的。 我如何解决它,使其正常工作? 我指定了不正确的数据types吗?