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

来源:互联网 发布:阿里云地域选择 湖北 编辑:程序博客网 时间:2024/04/24 23:03

1.安装nvm

访问https://github.com/coreybutler/nvm-windows下载windowsnvm工具

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 > 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;

          //显示文字及图片信息

          }

        }


      }



阅读全文
0 0