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 文件。如果还有其他问题,请提供更多详细信息以便进一步排查。

相关推荐
思麟呀34 分钟前
C++17(三)if constexpr+折叠表达式
开发语言·c++
ysa05103044 分钟前
【板子】ST表
c++·笔记·算法·板子
CHHH_HHH1 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
十五年专注C++开发2 小时前
fatal error C1189: #error: WinSock.h has already been included 的解决方案
c++·socket·boost
旖-旎5 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
c238566 小时前
《动态规划:从“傻傻穷举”到“过目不忘”的修仙之路》
c++·算法·动态规划
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练:【二分答案】案例2:木材加工
c++·二分答案·csp·高频考点·信奥赛·木材加工
aaPIXa6227 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
Augustzero8 小时前
`co_await` 按下暂停键之后:从零看懂 C++20 协程
c++·后端
知无不研8 小时前
c语言和c++中的静态关键字
开发语言·c++·静态关键字