Electron13.x +vue+ffi-napi 调用Dll动态链接库

本文详述如何在 Electron13.x 环境下,结合 Vue 和 ffi-napi 调用 Windows 动态链接库。通过创建DLL文件、设置64位环境、配置Vue项目、安装依赖、处理内存共享问题,实现在Vue渲染进程中使用DLL。遇到的问题包括DLL路径错误、CPU架构不匹配等,并提供了解决方案。
摘要由CSDN通过智能技术生成

本文主要介绍在 Electron13.x 中,使用ffi-napi,ref-array-napi,ref-napi 加载 Windows 动态链接库,并在Vue 渲染进程中使用。

这里列出所使用的环境:

  • Visual Studio 2017
  • NodeJS v14.16.1(x64)
  • node-gyp v9.1.0
  • Python 3.8.6
  • Electron :13.0.0
  • @vue/cli : 4.5.0
  • vue-cli-plugin-electron-builder : 2.1.1
  • ffi-napi : 4.0.3
  • ref-napi : 3.0.3
  • ref-array-napi : 1.2.2
  • ref-struct-napi : 1.1.1

1. 先自己开发一个DLL文件备用 

DLL中,分别开发了三种情况的C函数:

  • A. 参数为基本数据类型
  • B. 参数为指针
  • C. 参数为指向数组的指针

A比较简单,而B和C 涉及到 参数为指针的情况,函数内部可以修改指针指向的内存,函数运行完毕之后,外部内存中的值将会被修改。相当于输出参数,使用JS调用的时候涉及到内存共享问题。 

使用 Visual Studio 2017开发DLL步骤如下:

1.1  新建项目  

配置编译为 64 位,因为我的 NodeJS为 64 位

 

 1.2 头文件 

MyDllDemo.h IDE 自动生成了这个文件,并自动创建了 CMyDllDemo (类), nMyDllDemo(全局变量),fnMyDllDemo (函数), 这些我们都不需要,将它们删除,重新定义:

 MyDllDemo.h删除 生成的代码后,实现代码如下:

#声明一个函数
extern "C"
{
    __declspec(dllexport) int add(int a, int b);
}

extern "C"意味着:

被 extern "C" 修饰的变量和函数是按照 C 语言方式编译和链接的

__declspec(dllexport)意味着:

__declspec(dllexport)用于Windows中的动态库中,声明导出函数、类、对象等供外面调用,省略给出.def文件。即将函数、类等声明为导出函数,供其它程序调用,作为动态库的对外接口函数、类等。

  1.3 源文件

MyDllDemo.cpp 删除 生成的代码后,实现代码如下:

 1.4 编译生成DLL文件

 这个 MYDLLDEMO.dll 文件就是我们要在 Node JS中调用的DLL文件。 

注意这里编译出来的dll是64位的,NodeJS也应该是64位的。

 2. 在 Electron 13.x 中使用

这个方法使用的是vue-cli 框架

2、创建好项目,使用vue ui 添加插件 vue-cli-plugin-electron-builder,项目自动生成为electron项目
3、使用npm run electron:serve 就可以启动项目

2.1 使用vue cli 创建一个vue 项目 vue create vue-electron-demo

npm i -g @vue/cli@4.5.0
cd E:
vue creat vue-electron-demo
#选择默认选项
? Please pick a preset: (Use arrow keys)
> Default ([Vue 2] babel, eslint)
  Default (Vue 3 Preview) ([Vue 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值