2

我正在尝试将我的应用程序从电子 1.8.1 升级到 4.0.6。我正在使用多个本机节点 js 模块。它们都成功编译(或预构建的二进制文件可用)。

需要其中一个模块时出现以下错误。

XXXX\node_modules\electron-log\renderer.js:34 [10:14:51.109] Failed to add 
module. Error: Error: The specified procedure could not be found.
\?\XXXXX\node_modules\pc-ble-driver-js\build\Release\pc-ble-driver-js- 
 sd_api_v2.node

而其他本机模块(例如 serialport、noble-uwp)正在加载并正常工作。

此错误通常表示缺少所需的 DLL。我已经使用 Dependency Walker ( http://www.dependencywalker.com/ ) 来检查依赖关系,但我无法确定错误。我试图比较有效模块的依赖关系和我遇到错误的模块的依赖关系。我没有看到明显的差异。

我安装了 Visual Studio 2015。我还安装了 VC++ 2015 可再发行组件。

我的电子特定依赖项是:

"devDependencies": {
    "electron": "~4.0.6",
    "electron-builder": "~20.39.0",
    "electron-rebuild": "^1.8.4"
},

我正在使用 node-js 10.15.3。

我注意到在电子 3 之前,node_modules/electron/dist 存在许多 DLL。这些 DLL 不存在于电子 4 中。

是否需要安装任何其他依赖项才能使本机模块与电子 4 一起使用?

4

1 回答 1

2

我得到了这个工作。

要让原生节点 js 模块在 Windows 上与 electron 4 一起工作,它需要使用“延迟加载挂钩”进行编译。更多信息:https ://electronjs.org/docs/tutorial/using-native-node-modules#a-note-about-win_delay_load_hook和https://github.com/nodejs/node-addon-api/issues/269 #issuecomment-455580129。进行这些更改后,我失败的模块开始工作。

关于其他模块在没有这些更改的情况下工作的原因是因为它们直接使用 node-gyp。它负责使用这个钩子。

我失败的模块使用 cmake-js,它需要上面提到的额外更改。

于 2019-03-25T08:06:36.927 回答