本文主要介绍在 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