记一次 Electron 调用 C++ addon 报错

分类:打印     发布时间:2024-06-07     最后更新:2024-08-12     浏览数:1021
Electron 调用 node addon 报错:Error: A dynamic link library (DLL) initialization routine failed.

最近在做一个 Electron 项目,遇到了 Error: A dynamic link library (DLL) initialization routine failed.

折腾了两天,趁今天有时间,记录一下。 先说解决方案:

// binding.gyp

// 删除
 "msbuild_settings": {
        "ClCompile": {
          "ExceptionHandling": "Async"
        }
  }

网上找的资料,大多说的是 node.js 的版本和 electron 自带的版本不匹配,而我遇到的这种情况很特殊。

背景

我的 C++ addon 是基于 node-addon-api 写的,依赖了 setupapi.lib。

本地环境:

  • node: v16.14.2
  • node-gyp: v10.1.0
  • Pyhton: 3.11.3
  • VS2022: 17.8.34330.188

electron 版本信息:

{
  node: '16.16.0',
  v8: '10.6.194.27-electron.0',
  uv: '1.43.0',
  zlib: '1.2.12.1-motley',
  brotli: '1.0.9',
  ares: '1.18.1',
  modules: '109',
  nghttp2: '1.47.0',
  napi: '8',
  llhttp: '6.0.7',
  openssl: '1.1.1',
  cldr: '41.0',
  icu: '71.1',
  tz: '2022e',
  unicode: '14.0',
  electron: '21.4.4',
  chrome: '106.0.5249.199'
}

现象

  1. 本机 node 执行 node app.js,正常。
  2. Electron 执行 npm run start -> electron main.js --enable-logging,则报错。
上一篇: 用 C++ 写一个 nodejs addon 例子 下一篇: 基于 node.js 实现一个web打印解决方案