Jason Lee
首页
  • 学习笔记

    • 常用资源
    • html&css
    • webpack
    • vue2.x
    • vue3
    • typescript入门
    • 工程化实践
  • css
  • javascript
  • es6常问
  • 手写代码
  • 错误监控
  • webpack
  • vue框架
  • 浏览器相关
  • 计算机网络
  • 数据结构和算法
  • 学习笔记
工具
首页
  • 学习笔记

    • 常用资源
    • html&css
    • webpack
    • vue2.x
    • vue3
    • typescript入门
    • 工程化实践
  • css
  • javascript
  • es6常问
  • 手写代码
  • 错误监控
  • webpack
  • vue框架
  • 浏览器相关
  • 计算机网络
  • 数据结构和算法
  • 学习笔记
工具
  • 01.安装、搭建项目
  • 02.主进程与渲染进程通讯
  • 03.调用动态库
    • 安装开发环境
    • 安装ffi-napi
    • 参考资料
  • electron
jason lee
2021-09-04
目录

03.调用动态库

# 安装开发环境

npm install --global --production windows-build-tools
  1. 安装windows-build-tools;windows-build-tools自动安装基本的vs需要的包,和自动安装python 2.x的版本。

  2. 配置python环境变量控制面板>系统>关于>高级系统设置>环境变量>系统变量>找到path 图片加载失败

  3. 配置微软的包版本

npm config set msvs_version 2017
npm config set python C:\Users\leeru\.windows-build-tools\python27\python.exe
npm config set ELECTRON_MIRROR http://npm.taobao.org/mirrors/electron/

npm config edit

图片加载失败

4.打开Visual Studio Installer导入vs配置项一键导入.vsconfig文件(自己编辑)

图片加载失败 图片加载失败

vs配置项一键导入.vsconfig

{
 "version": "1.0",
 "components": [
  "Microsoft.VisualStudio.Workload.VCTools",
  "microsoft.visualstudio.component.vc.cmake.project",
  "microsoft.visualstudio.component.testtools.buildtools",
  "microsoft.component.vc.runtime.ucrtsdk",
  "microsoft.visualstudio.component.windows81sdk",
  "microsoft.visualstudio.component.vc.140",
  "microsoft.visualstudio.component.node.build",
  "microsoft.visualstudio.component.nuget"
 ]
}

完成!!!

# 安装ffi-napi

node-ffi是一个用于使用纯JavaScript加载和调用动态库的Node.js插件。它可以用来在不编写任何C++代码的情况下创建与本地DLL库的绑定。同时它负责处理跨JavaScript和C++的类型转换。

node-ffi连接了C代码和JS代码, 通过内存共享来完成调用, 而内部又通过ref,ref-array和ref-struct来实现类型转换。

"ffi-napi": "^2.4.5",

const ffi = require('ffi-napi');
// 加载dll的库
// 工作项目用到了身份证阅读器的.dll(sdtapi.dll基础api, WltRS.dll图像写入)
const sdtapi = ffi.Library(path.join(__static, '../extraResources/sdtapi.dll'), {
 SDT_StartFindIDCard: ['int32', ['int32', 'pointer', 'int32']],
 SDT_SelectIDCard: ['int32', ['int32', 'pointer', 'int32']],
 SDT_GetSAMID: ['int32', ['int32', 'string', 'int32']],
 SDT_GetCOMBaud: ['int32', ['int32', 'int32']],
 SDT_OpenPort: ['int32', ['int32']],
 SDT_ClosePort: ['int32', ['int32']],
 SDT_GetSAMStatus: ['int32', ['int32', 'int32']],
 SDT_ResetSAM: ['int32', ['int32', 'int32']],
 SDT_ReadBaseMsg: ['int32', ['int32', 'pointer', 'pointer', 'pointer', 'pointer', 'int32']]
});
const wltrs = ffi.Library(path.join(__static, '../extraResources/WltRS.dll'), {
 BYYJ_GetBmp: ['int32', ['string', 'int32']]
});

# 参考资料

  • node-ffi使用指南 (opens new window)
  • 苏南大叔 (opens new window)
  • LuoRiWuSheng (opens new window)
02.主进程与渲染进程通讯

← 02.主进程与渲染进程通讯

Theme by Vdoing | Copyright © 2019-2022 jason lee | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式