安装python2.7(可以执行npm install --global --production windows-build-tools 一键安装所需的一些依赖)
新建electron-vue项目
vue init simulatedgreg/electron-vue my-project
安装electron-rebuild
cnpm install --save-dev electron-rebuild
全局安装原生模块编译模块,编译ffi模块时需要用到的,这里一定要安装
cnpm install node-gyp -g
安装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://npm.taobao.org/mirrors/atom/
target:electron的版本号
arch : 计算机的架构(x64或者ia32),如果node环境是32位,那么这里就是ia32,如果是node环境是64位,那么这里就是x64。
dist-url :文件的下载地址,编译的时候回去这个地址上下载一些额外的文件,具体作用我不是很清楚。这里使用的是国内镜像,不是官方给出的地址,至于为什么,太慢了。
然后我们再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);