使用electron开发指静脉客户端遇到的问题总结
使用electron 使用nodejs 的ffi模块调用dll文件 总结
1.electron 与nodejs版本不需要一致,甚至nodejs版本应该高于electron的node版本
2.要安装 Visual Studio 15 生成工具 2017 可能还需要 Visual Studio Community 2017(不确定)
3.使用electron 的node模块前要 适应化 在项目目录下 执行
set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets
set python=C:\Python27\python2.ex
然后在项目根目录下执行".de_modules/.bin/electron-rebuild" ".de_modules/ffi
注意 VCTargetsPath是 ffi.vcxproj配置中的$(VCTargetsPath)
例:
<Import Project="$(VCTargetsPath)\xxxx.props"/>
所以要将VCTargetsPath改为本软件中VCTargetsPath的目录
4.如果在 js报 require的错误,为main.js配置出错
5.调用dll应放入项目同级目录,而不是项目的子目录
使用sqlite3数据库
sqlite3 参考资料http://http://www.cnblogs.com/DonaHero/p/9809325.html
安装vc2015 需要用到140工具集
安装SQLiteStudio 处理数据库用的软件
修改环境变量(已经卸了vs2017装了vs2015) VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140
cnpm install sqlite3@latest --build-from-source --runtime=electron --target=3.0.9 --dist-url=https://atom.io/download/electron --save
//target为electron版本
然后点开项目提示 缺少 node-pre-gyp 运行下面
cnpm install node-pre-gyp@latest --build-from-source --runtime=electron --target=3.0.9 --dist-url=https://atom.io/download/electron --save
但是编译完后 node_modules下的sqlite3和node-pre-gyp为快捷方式,复制后需要重新 编译sqlite3和node-pre-gyp,不知道为什么
安装玩以后 在cmd用其他npm命令会提示 要用v141平台
通过 set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets 命令
来提前定义 可以恢复
js使用sqlite3 创建数据库需要详细的路径
通过此来获取路径 (decodeURI 转译中文路径)
var url = decodeURI(window.document.location.pathname.substr(1).replace('index.html', ''));
db.serialize 使数据库可以并联执行,确保效率...不能保证顺序执行,需要写到内部进行回调
//electron 中html使页面随不同分辨率调整,具体参数还得按实际来调整 放入渲染进程内即可
var devInnerHeight = 1000; //开发时的InnerHeight
var devDevicePixelRatio = 1; //开发时的devicepixelratio
var devScaleFactor = 1; //开发时的ScaleFactor
var scaleFactor = require('electron').screen.getPrimaryDisplay().scaleFactor;
var zoomFactor = window.innerHeight / devInnerHeight * window.devicePixelRatio / devDevicePixelRatio * devScaleFactor / scaleFactor;
require('electron').webFrame.setZoomFactor(zoomFactor);
关于ffi 调用dll 可能涉及指针
客户端指静脉1:1认证
int FVC_VerifyS(char* p_enrollTemp,intp_level,int* p_result)
参数:
char* p_enrollTemp:一条注册模板数据,数据长度为960
int p_level:安全等级,设置为2即可
int*p_result:认证结果,0表示认证通过,非0认证失败
返回值
0:成功;非0:失败
客户端指静脉1:N识别
intFVC_IdentifyM(
char* p_enrollTemps,
int p_enrollTempNum,
int p_level,
int* p_resultArry,
int* p_resultNum
)
参数:
char* p_enrollTemps: N条已注册的手指静脉模板数据;
int p_enrollTempNum: N的值;
int level:认证精度级别,取值范围【0,4】,建议设置为2.
int* p_resultArry:整型数组,数组的长度为N;
resultPtr[0]的值为N条指静脉模板数据中正确匹配的第一条模板数据在N中的位置,取值范围[0,N-1];
int*p_resultNum:N条指静脉数据中正确匹配的条数,认证通过,值大于或等于1;认证失败:值为0。
返回值
0:成功;非0:失败
以下为对此的调用
var ffi= require('ffi');
const ref = require('ref');
var refArray = require('ref-array');
var Struct = require('ref-struct');
var intPtr=ref.refType('int');
var result1vMArry = Struct({
'resultPtr': refArray('byte', 8)
});
var ZN_FVC_DLL = ffi.Library('ZniFingerVeinlib', {
'FVC_VerifyS' : [ 'int', ['string','int',intPtr] ],
'FVC_IdentifyM' : [ 'int', ['string','int','int', ref.refType(result1vMArry),intPtr] ]
});
//1:N多指纹认证
var resultArry = new result1vMArry();//结构体初始化
var ret = ZN_FVC_DLL.FVC_IdentifyM(enrolTemp, enrolTemps.length,'2',resultArry.ref(),handleRef);
var buf = Buffer.from(resultArry.resultPtr); //获取已生成结构体中属性数据。
var result=buf[0];
//1:1指纹认证
var handleRef = ref.alloc('int');
var buffer=new Buffer(enrolTemp,'UTF-8');
var ret= ZN_FVC_DLL.FVC_VerifyS(buffer ,2, handleRef);
var result =handleRef.deref();//相似1 不相似0
除此之外如果用buff.toString类型,Buffer设定长度过长且不知道返回长度,其中的多余长度会转ascii码为0 的值
var serialId = new Buffer(50);
var rtn = ZN_FVC_DLL.FVC_GetDeviceInfo(serialId, firmwareId);
var str=serialId.toString();//str此时包含ascii码为0的空行,并且传统方法去不掉
使用此方法去除
//去除ASCII码的特殊字符,主要用于去除buffer转string多的空行
function getStr(str){
var result="";
for(var i = 0 ; i < str.length ; i++ ){
var tempStr = str.charCodeAt(i);
if(tempStr!=0){
result=result+String.fromCharCode(tempStr);
}
}
return result;
}
electron 打包
必须翻墙
在package.json添加
"scripts": {
"pack": "electron-packager . Finger --win --out temp/Finger3 --arch=ia32 --app-version=1.0.0 --electron-version=3.0.10"
}
然后通过命令 npm run pack 来执行打包
有缺少的组件先通过npm/cnpm安装,例如下面的
set VCTargetsPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets
cnpm install node-pre-gyp@latest --build-from-source --runtime=electron --target=3.0.9 --dist-url=https://atom.io/download/electron --save
记得在packjson里面添加(好像会自动加,有时候不会)
附我的
{
"name": "cssql2",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron . --enable-logging",
"postinstall": "electron-builder install-app-deps",
"pack": "electron-packager . Finger --win --out temp/Finger3 --arch=ia32 --app-version=1.0.0 --electron-version=3.0.10"
},
"author": "",
"license": "ISC",
"dependencies": {
"electron": "^3.0.10",
"ffi": "^2.2.0",
"node-pre-gyp": "^0.12.0",
"sqlite3": "^4.0.4",
"ref-array": "^1.2.0",
"array-index": "^1.0.0",
"es6-symbol": "^3.1.1"
},
"devDependencies": {
"electron-rebuild": "~1.8.2"
}
}
"pack": "electron-packager . Finger --win --out temp --arch=ia32 --app-version=1.0.0 --electron-version=3.0.10 --icon=OEM.ico"
OEM.ico放在 Finger文件夹下
在cmd 输入 >cd /d D:\work\Electron\xxx\cs\Finger
npm run pack
使用electron开发指静脉客户端遇到的问题总结的更多相关文章
- 使用electron开发一个h5的客户端应用创建http服务模拟后台接口mock
使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock 在上一篇<electron快速开始>里讲述了如何快速的开始一个electron的应用程序,既然electr ...
- 使用Electron开发PC客户端
最近公司要求开发一个PC客户端,要求不能使用.NET开发(为了不让用户安装.net framework),所以就选择了Electron(随口听别人说了一句,之前从来没有接触过).目前项目要完毕了,所以 ...
- Vue 全家桶 + Electron 开发的一个跨三端的应用
代码地址如下:http://www.demodashi.com/demo/11738.html GitHub Repo:vue-objccn Follow: halfrost · GitHub 利用 ...
- electron 开发拆坑总结
electron 总结 前言 有一个web项目需要用客户端来包装一下 项目的主要业务都在服务器上 所以项目的大多数功能都用url 地址来访问: 客户端登陆界面在本地 打包客户端的本地登陆界面 做为登陆 ...
- 基于 SailingEase WinForm Framework 开发优秀的客户端应用程序(目录)
本系统文章将详细阐述客户端应用程序的设计理念,实现方法. 本系列文章以 SailingEase WinForm Framework 为基础进行设计并实现,但其中的设计理念及方法,亦适用于任何类型的客 ...
- Electron-使用Electron开发第一个应用
使用Electron开发第一个应用 Electron 应用的目录结构如下: app/ ├── package.json ├── main.js └── index.html 新建一个app文件夹 将这 ...
- (转)【ASP.NET开发】获取客户端IP地址 via C#
[ASP.NET开发]获取客户端IP地址 via C# 说明:本文中的内容是我综合博客园上的博文和MSDN讨论区的资料,再通过自己的实际测试而得来,属于自己原创的内容说实话很少,写这一篇是为了记录自己 ...
- Electron开发环境部署
Electron开发环境部署 安装node.js 可以从node.js官方网站上获取安装包,并进行安装,安装完可以通过 ndoe -v 指令进行版本查看. 本文的开发环境为node.js 4.4.5. ...
- 【Electron】Electron开发入门
Electron简介: Electron提供了丰富的本地(操作系统)的API,使你能够使用纯JavaScript来创建桌面应用程序,并且跨平台(win,mac,linux等各种PC端平台).与其它各种 ...
随机推荐
- 5.SLB排错思路
500/502/504可能的原因: https://help.aliyun.com/knowledge_detail/55207.html 请求不均衡可能的原因: https://help.aliyu ...
- C++并发编程学习笔记
// // main.cpp // test1 // // Created by sofard on 2018/12/27. // Copyright © 2018年 dapshen. All ...
- python3基础-set
集合:无序的,不重复的数据组合 作用: 1.去重,把一个列表变成集合,就自动去重了 2.关系测试,测试两组数据之前的交集.差集.并集等关系 set和dict类似,也是一组key的集合,但不存储valu ...
- 简单搭建一个SpringBoot
1.SpringBoot下载 https://start.spring.io/ 选择工程类型,编译语言,版本,工程名称,需要支持组件等:选择好了以后点击生成项目. 之后会下载一个压缩文件,解压之后导入 ...
- nginx+ flume
nginx 作用: 做负载均衡 nginx和lvs的区别:nginx可以做反向代理 1.上传nginx安装包 tar -zxvf tengine-2.1.02.安装环境 依赖 gcc opens ...
- day 09
内存管理 引用计数:垃圾回收机制的依据 当变量的值被引用的时,变量值的引用计数+1,当变量名被解除绑定时该值的引用计数减少一. 当引用计数变成0的时候会被垃圾回收机制回收. 引用计数会出现循环引用问题 ...
- Selenium Grid和IE /Firefox各种填坑
使用selenium grid的步骤 1.确保hub和node都安装并且配置好了java jdk. 2.在hub上运行以下命令. java -jar C:\Software\selenium\sele ...
- css第四天
四丶 补充:CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - displ ...
- 使用Vue-Router路由
Vue Router 是 Vue.js 官方的路由管理器.它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌.包含的功能有: 嵌套的路由/视图表 模块化的.基于组件的路由配置 路由参数. ...
- day48 前端高级选择器优先级
复习 1. 基础选择器 标签选择器(div) | 类选择器(.div1) | id选择器(#div2) <div class="div1" id="div2&quo ...