安装python2.7,一定要2.7
https://www.python.org/download/releases/2.7/
安装后设置环境变量:在环境变量path中添加C:\Python27 (python路径)
新建electron-vue项目
vue init simulatedgreg/electron-vue my-project
安装electron-rebuild
cnpm install --save-dev electron-rebuild
全局安装原生模块编译模块,编译ffi模块时需要用到的,这里一定要安装
3.7.0版本稳定
cnpm install node-gyp@3.7.0 -g
安装后如何全局找不到模块就设置环境变量,path中添加C:\Users\Administrator\AppData\Roaming\npm
安装ffi
cnpm install ffi --save
在项目中导入ffi
const ffi=require("ffi");
npm run dev试着运行一下会发现报错了。
咋又作妖了呢?事实上electron在使用c++模时还需要根据electron的版本等信息重新编译一下,这样在electron中才能执行,我们需要进入ffi模块执行重新编译的命令,并注入参数。
cmd进入node_modules/ffi目录执行如下,(速度慢就翻墙)
node-gyp rebuild -target=2.0.4 -arch=x64 -dist-url=https://atom.io/download/electron
target:electron的版本号
arch : 计算机的架构(x64或者ia32),如果node环境是32位,那么这里就是ia32,如果是node环境是64位,那么这里就是x64。
dist-url :文件的下载地址,编译的时候回去这个地址上下载一些额外的文件,具体作用我不是很清楚。这里使用的是国内镜像,不是官方给出的地址,至于为什么,太慢了。
如果dist-url地址下载还是很慢的话更换试试如下的地址(下面提供了2种):
https://atom.io/download/atom-shell
https://npm.taobao.org/mirrors/atom/
然后我们再npm run dev试着运下,发现还是报错
这时候我们在项目根目录下需要执行如下命令:
.\node_modules\.bin\electron-rebuild.cmd
然后我们再npm run dev就成功了。
调用dll代码
var libpath = path.join(__dirname, '/termb.dll');
//注册dll中的接口
//InitComm为dll中的方法名,['int',['int']]第一个int是出参类型,最后一个int所在的数组放的是入参的类型
var testLib = ffi.Library(libpath, {
InitComm:['int',['int']]
});
//调用
const dllRet = testLib.InitComm(1001);
console.log('ret => '+dllRet);
注意:dll如果是32 bit,那么node环境也要32位 ,如果dll是64,那么node环境也要64位;
gbk编码问题,如果调用dll返回的结果是string,需要解码
var iconv = require("iconv-lite");
var testLib = ffi.Library(libpath, {
funcName:['int',['string','int']]
});
var buffer= Buffer.alloc(10);
var resultRen=testLib.funcName(buffer,10);
var data=iconv.decode(buffer, 'GBK');
console.log(data);
打包问题
发现打包后,会出现找不到dll的问题
发现打包后的exe默认加载根目录的dll,而打包后的dll不知到哪儿了。。。。
不知道有什么好办法,只好使用笨方法:
首先dll路径用如下路径
var libpath = 'termb.dll';
然后打包后再把此dll文件拖进打包后的根目录
来源:oschina
链接:https://my.oschina.net/u/3112095/blog/3006099