记录踩的坑,防止以后忘记,写的不是很详细,勿怪.
一些注意点
1. 需要用window电脑
2. npm容易出错,建议使用cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
3. 如果dll是32位的nodejs和electron都要使用对应的版本才可以使用,
4. nodejs版本建议9版本以下
拉取electron及依赖安装
// 首先安装 node-gyp
1. cnpm install node-gyp -g
// 拉取electron-vue项目
2. vue init simulatedgreg/electron-vue my-project
// 这里我是将electron的版本改成了1.8.2在进行安装,在这个版本测试稳定,其他的没测试
cd my-project cnpm install
ffi安装
安装ffi之前需要的环境有4个
- python2.x 这里我用的是2.7版本,(3.x不支持); 安装完成以后需要将python设置为环境变量
- .net framework 4.5.1
- visual C++ Build Tools,或者 (vs2015以上(包含15))
以上三个步骤可以直接执行下面的命令进行安装
cnpm install --global --production windows-build-tools
在上面执行成功之后即可安装 node-ffi
1. cnpm install node-ffi
编译原生模块(ffi与electron用的v8版本引擎不一致)
方式1:
分别到 ref和ffi执行下面命令
cd .\node_modules\ref\ 和 cd .\node_modules\ffi\
执行
node-gyp rebuild --arch=ia32 --dist-url=https://atom.io/download/atom-shell --runtime=electron --target=1.8.2
--arch=ia32 : ia32表示32位,64位请改成x64,--target=1.8.2 与上面安装的electron版本一致
出现 生成代码
字样表示成功
方式2
1. cnpm install -g electron-builder
// 在项目目录下执行
2. electron-builder install-app-deps
在根目录下创建.npmrc
# Electron 的版本。
set npm config --target=1.8.2
# Electron 的系统架构, 值为 ia32 或者 x64。
set npm config --arch=ia32
# 下载 Electron 的 headers。
set npm config --disturl=https://npm.taobao.org/mirrors/atom/
# 告诉 node-pre-gyp 我们是在为 Electron 生成模块。
set npm config --runtime=electron
ffi调用
const ffi = require('ffi')
const iconv = require('iconv-lite')
const Dll =new ffi.Library('dll\\fzyktclient.dll', {
// 第一个参数为返回值,第二个参数是参数
add: ['int', ['int','int', 'string']],
})
const resBuffer= Buffer.alloc(1024);
const res=Dll.add(1,2,resBuffer)// 3
// 返回值,0代表成功
if(res===0){
// resBuffer 返回的提示信息
// 解决返回中文乱码问题
const data= const data=iconv.decode(resBuffer, 'GBK');
console.log(data)// 操作成功
}
问题解决
Q:
error msb4019:未找到导入的项目“C:\Program Files (x86 )\MSBuild\
Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Default.props”
A:
// 在命令行执行改命令即可,2017 是你当前vs对应的版本,比如你装的是2015版本,就改成2015
npm config set msvs_version 2017
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 126
A:
Dll引用的路径不对,检查路径是否书写正确,需要用绝对路径
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 193
A:
dll 位数不对应,例如electron/nodejs是32位的dll是64位的
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 127
A:
DLL中没有找到对应名称的函数,需要检查头文件定义的函数名是否与DLL调用时写的函数名是否相同。
Dll错误,检查你的dll文件是否还引用了其他的资源及dll文件
Q:
Uncaught Error: Dynamic Linking Error: Win32 error 1114
A:
dll初始化失败,一般是在打包成exe文件发生,可能是你的dll在打包后的位置不正确,
程序调用不到就会去系统c盘找对应的dll文件
Q:
fatail error LNK1127
A:
删除用户目录下.node-gyp 重新安装 npm install node-gyp -g件
Q:
调用dll中文乱码问题
A:
// 安装iconv-lite
1.cnpm install iconv-lite -D
2.let iconv = require('iconv-lite')
3.iconv.decode(obj, 'GBK') // 解码成utf8.
Q:
打包成exe时出现
The process cannot access the file because it is being used by another process
A:
原因是程序被占用,删掉build李敏啊除icons外的文件,重新执行编译,如果还不是,则关闭编辑工具
比如vscode也会占用,然后在命令行重新编译即可