electron-egg electron-egg
首页
  • v4.x
  • v3.x
  • v2.x
插件
  • v4.x
  • v3.x
demo
支持
知识点
案例
交流
  • GitHub (opens new window)
  • Gitee (opens new window)
首页
  • v4.x
  • v3.x
  • v2.x
插件
  • v4.x
  • v3.x
demo
支持
知识点
案例
交流
  • GitHub (opens new window)
  • Gitee (opens new window)
❤️成为赞助商
  • 快速入门

  • 基础功能

    • 目录结构
    • 生命周期
    • 前端模块

    • 控制器
    • 服务层
    • 预加载层
    • 插件

    • 通信

    • 数据库

    • 任务

    • 日志
    • 额外资源目录
    • 调试
    • 脚本工具
    • DLL使用
      • 调用第三方程序
      • 远程模式
    • 生成软件

    • 升级

    • 跨语言支持

    • 更新记录
    • 常见问题
    目录

    DLL使用

    Dll文件是动态链接库,桌面软件中经常需要使用。

    因为该库的调用,涉及许多工具的安装,因此不集成到框架中;但本文提供完整的安装使用说明,供大家参考。

    避坑指南

    1. 如果引入模块报错,那么降低electron版本到 v18 及以下版本

    2. 32位的 dll 必须在 32位node、 32位electron 上调用

    该内容不再更新,推荐使用 koffi https://koffi.dev/

    # 准备环境

    # 编译工具
    npm i -g node-gyp
    
    # C++构建工具
    1. 管理员模式打开PowerShell
    2. npm --vs2015 i -g --production windows-build-tools
       或者 npm i -g --production windows-build-tools 
       
    # 外部接口调用库
    1. npm install ref-napi         // 基本类型
    2. npm install ref-array-napi   // 数组类型
    3. npm install ref-struct-napi  // 结构体类型
    4. npm install ffi-napi         // 连接c代码和js代码
    
    # 编译 ref-napi 库
    1. cd ./node_modules/ref-napi
    2. node-gyp configure  // 配置
    3. node-gyp build      // 编译
    

    # 测试代码

    const ffi = require('ffi-napi');
    var ref = require('ref-napi');
    var ArrayType = require('ref-array-napi');
        
    /**
     * exec dll file
     */
    async execDll () {
      // 资源路径
      const dllFile = 'myDllDemo.dll';
      const dllPath = path.join(Ps.getExtraResourcesDir(), "dll", dllFile);
    
      // 映射到C语言 int数组类型
      var IntArray = ArrayType(ref.types.int);
    
      // 加载 DLL文件,无需写扩展名,将DLL中的函数映射成JS方法
      const MyDellDemo = new ffi.Library(dllPath, {
        // 方法名必须与C函数名一致
        add: [
          'int', // 对应 C函数返回类型
          ['int', 'int'] // C函数参数列表
        ],
        // 使用 ffi中内置类型的简写类型
        addPtr: ['void', ['int', 'int', 'int*']],
        // IntArray 是上面通过 ArrayType 构建出来的类型
        initArray: ['void', [IntArray, 'int']]
      });
    
      // 调用add 方法
      const res = MyDellDemo.add(1, 2);
      console.log(`add method result of 1 + 2 is: ` + res);
    
      // 调用addPtr 方法
      // 使用Buffer类在C代码和JS代码之间实现了内存共享,让Buffer成为了C语言当中的指针。
      // C函数使用指针操作函数外部的内存,所以首先需要 分配一个int类型的内存空间 第一个参数为 C语言数据类型,第二个参数为 默认值
      var intBuf = ref.alloc(ref.types.int, 100);
      console.log('addPtr 调用前数据>>', ref.deref(intBuf)); //获取指向的内容
      MyDellDemo.addPtr(2, 2, intBuf); // 调用函数,传递指针
      console.log('addPtr 调用后数据>>', ref.deref(intBuf));
    
      // 调用initArray 方法
      // IntArray 是前面使用ref-napi 和 ref-array-napi 库创建的数据类型,数组的长度为 8
      // 这里一定要分配内存空间,否则 函数内的指针无法操作内存
      let myArray = new IntArray(8);
      MyDellDemo.initArray(myArray, 8);
      console.log('初始化数组执行结果:');
      for (var i = 0; i < myArray.length; i++) {
        console.log(myArray[i]);
      }
    
      return true;
    } 
    

    # 测试使用的dll文件位置:

    ./build/extraResources/dll/myDllDemo.dll
    

    注:引用 https://blog.csdn.net/paopao_wu/article/details/107507225

    上次更新: 2025/06/06, 07:21:49
    脚本工具
    调用第三方程序

    ← 脚本工具 调用第三方程序→

    Theme by Vdoing | Copyright © 2023-2025 哆啦好梦 | 京ICP备15041380号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×