electron调用c++ dll lib

主要的工具包

  1. node-addon-api
  2. node-gyp

主要的配置

复制代码
{
  "variables": {
    # 'module_mac': "./../sdk/mac",
  },
  "targets": [
    {
      "target_name": "native_module",
      "defines": ["NAPI_DISABLE_CPP_EXCEPTIONS"],
      "cflags!": ["-fno-exceptions"],
      "cflags_cc!": ["-fno-exceptions"],
      "conditions": [
        [
          "OS==\"win\"", {
            "msvs_settings": {
              "VCCLCompilerTool": {
                "ExceptionHandling": 1,
                "RuntimeLibrary": "MultiThreadedDLL",
                "AdditionalOptions": [
                  "/std:c++17",
                  "/EHsc"
                ]
              }
            },
            "include_dirs": [
              "node_modules/node-addon-api",
              "./src/**/Include"
            ],
            "link_settings": {
              "libraries": [
                "./../src/**/**/**.lib"
              ]
            },
            "defines": [
              "NAPI_DISABLE_CPP_EXCEPTIONS"
            ],
            "cflags!": ["-fno-exceptions"],
            "cflags_cc!": ["-fno-exceptions"]
          }
        ],
        [
          "OS==\"mac\"", {
            "include_dirs": [
              "node_modules/node-addon-api"
            ],
            "mac_framework_dirs": [
              "./../src/**/Lib"
            ],
            "link_settings": {
              "libraries": [
                "-L./../src/**/Lib",
                "**.a"
              ]
            },
            "xcode_settings": {
              "DEBUG_INFORMATION_FORMAT": "dwarf-with-dsym",
              "OTHER_CPLUSPLUSFLAGS": [
                "-ObjC++",
                "-std=c++11",
                "-stdlib=libc++",
                "-fvisibility=hidden",
                "-frtti"
              ],
              "OTHER_LDFLAGS": [
                "-stdlib=libc++",
                "-lresolv"
              ],
              "DEPLOYMENT_POSTPROCESSING": "YES"
            },
            "defines": [
              "NAPI_DISABLE_CPP_EXCEPTIONS"
            ],
            "cflags!": ["-fno-exceptions"],
            "cflags_cc!": ["-fno-exceptions"]
          }
        ]
      ],
      "sources": [
        "src/native_module.cpp"
      ]
    }
  ]
}

DLL 文件的运行时路径

为了确保 DLL 文件在运行时被找到,你需要将 DLL 文件放在下列路径之一:

  • 可执行文件所在的目录。
  • 在系统 PATH 环境变量中添加包含 DLL 文件的路径。
  • 将 DLL 文件复制到项目的根目录中。

编译和运行

在项目根目录下运行以下命令:

node-gyp configure node-gyp build

编译完成后,在 Node.js 中加载和运行你的本地模块:

const yourModule = require('./build/Release/native_module');

这样,应该会正确编译并链接到 DLL 文件,并且在运行时能够找到并使用该 DLL 文件。如果还有其他问题,请提供更多详细信息以便进一步排查。

相关推荐
借雨醉东风2 小时前
程序分享--常见算法/编程面试题:旋转矩阵
c++·线性代数·算法·面试·职场和发展·矩阵
云泽8083 小时前
笔试算法 - 双指针篇(二):四大经典求和题型 + 有效三角形计数问题
c++·算法
十五年专注C++开发4 小时前
WaitingSpinnerWidget: 一个高度可配置的自定义Qt等待加载动画组件
开发语言·c++·qt·waitingspinner
qeen874 小时前
【数据结构】树的基本概念及存储
c语言·数据结构·c++·学习·
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【区间贪心】:种树
c++·算法·贪心·csp·信奥赛·区间贪心·种树
hi_ro_a5 小时前
C++ 哈希表封装 unordered_map /unordered_set
数据结构·c++·算法·哈希算法
c++之路5 小时前
C++ 动态内存
java·jvm·c++
橘颂TA9 小时前
【Linux】读写锁
大数据·linux·开发语言·c++·读写锁
霍田煜熙9 小时前
HuoTian的两赛vlog(游记)~(2026.04.26写)
c++·奥数·双赛·vlog
CoderCodingNo10 小时前
【CSP】CSP-J 2019 江西真题 | 次大值 luogu-P5682 (适合GESP四、五级及以上考生练习)
开发语言·c++·算法