您的位置:首页 > Web前端 > Node.js

nodejs安装electron使用ffi模块调用windows的dll文件

2017-07-04 09:27 411 查看
1.安装nvm
访问https://github.com/coreybutler/nvm-windows下载windows的nvm工具
2.设置国内镜像,否则需要翻墙
nvm node_mirror  https://npm.taobao.org/mirrors/node/
nvm npm_mirror  https://npm.taobao.org/mirrors/npm/
3.安装(参照https://github.com/nodejs/node-gyp#option-2)
.netframework 4.5.1
python2.7 
Visual C++ Build Tools
npm config set msvs_version 2015
4.安装node-gyp  npm install -g node-gyp 
5.生成项目目录  
npm init //初始化
npm install electron —save-dev  //安装electron
npm install electron-rebuild —save-dev //安装自动构建工具
6.修改package.json文件
"scripts": {
    "start": "electron .",//启动方式
    "postinstall": "electron-builder install-app-deps"//自动构建
  },
7.安装ffi插件npm install ffi —save
8.ffi调用dll时需要将某些返回汉字解码需要引入iconv-lite插件,
npm install buffer —save
npm install stream —save
npm install iconv-lite —save

9.使用ffi调用dll例子
const ffi = require('ffi')
  const ref = require('ref')
  const iconv = require('iconv-lite')
  // typedef
  var initCharParam = ref.refType('char'); 
  var initIntParam = ref.refType('int');

  var fggs = new ffi.Library(__dirname+'\\dll\\Sdtapi', {
   'InitComm':
   [
      'int', [ 'int']
   ],
   'Authenticate':['int',[]],
   'ReadBaseMsg':['int',[initCharParam,initIntParam]]
    });

  var ret =fggs.InitComm(1001)

  if ( ret ){
        ret= fggs.Authenticate();
        if (ret){

          let msg = new Buffer(200);
  let len = ref.alloc('int');
 
          ret= fggs.ReadBaseMsg(msg,len);
          
  let len_val = len.deref();
          if (ret &
4000
gt; 0 ){
  let name = trim(iconv.decode(msg.subarray(0,31),'gb2312'));
  let sex = trim(iconv.decode(msg.subarray(31,34),'gb2312'));
  let folk = trim(iconv.decode(msg.subarray(34,44),'gb2312'));
  let birthday = trim(iconv.decode(msg.subarray(44,53),'gb2312'));
  let address = trim(iconv.decode(msg.subarray(53,124),'gb2312'));
  let code = trim(iconv.decode(msg.subarray(124,143),'gb2312'));
  let agency = trim(iconv.decode(msg.subarray(143,174),'gb2312'));
  let expire_begin = trim(iconv.decode(msg.subarray(174,183),'gb2312'));
  let expire_end = trim(iconv.decode(msg.subarray(183,191),'gb2312'));
  debugger;
          //显示文字及图片信息
          }
        }

      }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: