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

相关推荐
珹洺40 分钟前
C++算法竞赛篇:DevC++ 如何进行debug调试
java·c++·算法
古月-一个C++方向的小白7 小时前
C++11之lambda表达式与包装器
开发语言·c++
tanyongxi669 小时前
C++ AVL树实现详解:平衡二叉搜索树的原理与代码实现
开发语言·c++
斯是 陋室11 小时前
在CentOS7.9服务器上安装.NET 8.0 SDK
运维·服务器·开发语言·c++·c#·云计算·.net
tju新生代魔迷12 小时前
C++:list
开发语言·c++
HHRL-yx12 小时前
C++网络编程 5.TCP套接字(socket)通信进阶-基于多线程的TCP多客户端通信
网络·c++·tcp/ip
tomato0912 小时前
河南萌新联赛2025第(一)场:河南工业大学(补题)
c++·算法
每一天都要努力^15 小时前
C++拷贝构造
开发语言·c++
豆豆(设计前端)15 小时前
如何成为高级前端开发者:系统化成长路径。
前端·javascript·vue.js·面试·electron
NoirSeeker16 小时前
在windows平台上基于OpenHarmony sdk编译三方库并暴露给ArkTS使用(详细)
c++·windows·arkts·鸿蒙·交叉编译