nodejs - 将电子与 ffi 结合使用

Posted

技术标签:

【中文标题】nodejs - 将电子与 ffi 结合使用【英文标题】:nodejs - using electron with ffi 【发布时间】:2017-12-02 00:50:49 【问题描述】:

我在 Windows 10 x64 上安装了 nodejs x86,我使用此 npm i -g electron 安装了带有 npm 的电子,并有一个用于驱动外部设备的 .dll 文件。

我正在使用电子开发桌面应用程序。

我搜索了一种从 js 调用 dll 函数的方法,我找到了 ffi 包。首先我安装了节点 x64,但我遇到了这个错误

App threw an error during load Error: %1 is not a valid Win32 application.

然后我搜索了它,我在 github 上找到了这个 issue。

我卸载了我的 nodejs 并用 x86 版本替换它,这个错误仍然存​​在于我的项目中。似乎当我使用 npm npm i ffi 安装 ffi 时,npm 会下载源文件并使用主机架构(x64)对其进行编译,然后 ffi 在 x64 模式下使用我的 Visual Studio 2015 自行编译。 我什至尝试使用npm i ffi --arch=ia32 安装 ffi,但它不起作用。 我没有 dll 源文件,所以我无法为任何特定架构重建它。

如何将电子 32 位版本与 ffi 32 位一起使用?

有什么方法可以下载 ffi prebuild 版本并将其附加到项目中?

我想使用任何版本的电子(x64 和 x86)并使用我相同的 32 位 dll。

【问题讨论】:

64bit 可以处理 32bit dll。当文件路径中有空格时会发生此错误。所以 C:\Program Files\... 会抛出错误。希望这可以帮助。其他相同的问题,github.com/node-ffi/node-ffi/issues/258github.com/node-ffi/node-ffi/issues/168 和 github.com/mapbox/node-sqlite3/issues/267 所以你的意思是我改变了我的 nodejs 安装路径?我的项目路径没有空格。 nodejs安装路径没问题。但请尝试不带空格的 .dll 路径。 好吧,我的 dll 路径中没有空格。实际上我认为问题是另外一回事。我创建了另一个目录(另一个 nodejs 包)并使用npm init 对其进行了初始化,我只安装了 node-ffisleep。我运行node test.js,它成功了。简单的单节点应用程序与我的设备正确通信抛出 dll 文件。但现在我将 test.js 复制到我的电子应用程序目录并使用node test.js 运行它,出现同样的错误。问题出在const ffi = require('ffi') 代码行上。它无法正确导入模块或电子的 node-js 有问题。 我知道它迟到了,但对于其他人来说,为了与 32bit dll 合作,安装 32 bit NodeJS,对于 64bit dll 安装 64 bit nodeJS。安装 ffi 、 ref 、electron-rebuild 模块后,只做一件事运行electron-rebulid --arch=ia32 它将再次构建您的所有本机模块。 (注意:- 当您将 nodeJS 的架构设置为与您的 dll 比较时,无需使用 electron-rebuild 传递 --arch 标志) 【参考方案1】:

该错误通常发生在尝试从 32 位应用程序加载 64 位 DLL 时。

在大多数情况下,electron-rebuild 应该可以通过为正确的环境重新构建模块来解决此问题。

【讨论】:

以上是关于nodejs - 将电子与 ffi 结合使用的主要内容,如果未能解决你的问题,请参考以下文章

如何在将 React 与电子结合使用时分离渲染器和主进程依赖关系?

将列表与列表中不同长度的列表相结合

将 AWS Appsync 与 AWS Neptune 结合使用

将 Mailchimp/Mandrill 与 Ruby 结合使用

如何将填充段落与 supercite 结合起来?

将常规函数与 WINDOW 函数结合使用的 Google BigQuery SQL 问题