nodejs调用delphi编写的dll中,使用了dll调用windows api转读取文件属性,感觉使用nodejs也可直接调用windows api。
此处需用到windows系统的version.dll,该dll位于C:\WINDOWS\System32\下,是一个32位的dll,故此处直接使用32位版本的node。
一、安装所需模块(node-gyp、ffi、ref、iconv-lite)
npm install node-gyp -g npm install ffi -- save npm install ref --save
npm install iconv-lite --save
其中:node-gyp直接全局安装,ffi、ref、iconv-lite安装在项目中即可
PS:
1. ffi与ref的安装需要用到python,需先装好。
2. ffi用来调用dll
3. ref用来设置buffer
4. iconv-lite用来转码GBK字符
二、示例,使用nodejs读取文件属性
1 const ffi = require('ffi'); 2 const ref = require('ref'); 3 const iconvLite = require('iconv-lite'); 4 5 // 定义dll 6 const version = ffi.Library('C://WINDOWS//System32//version', { 7 'GetFileVersionInfoSizeA': [ 'int', ['string', 'int'] ], 8 'GetFileVersionInfoA': ['int', ['string', 'int', 'int', ref.refType(ref.types.char)]], 9 'VerQueryValueA': ['int', [ref.refType(ref.types.char), 'string', ref.refType(ref.types.CString), ref.refType('int')]] 10 }); 11 12 const Int16Format4 = function (num) { 13 const s = '0000'; 14 const f = num.toString(16); 15 return s.substr(0, 4 - f.length) + f; 16 }; 17 18 try { 19 console.log('Begin Test'); 20 // 转码,windows使用AnsiChar,利用iconv-lite使用gbk解码 21 const file = iconvLite.encode('C:\\Program Files (x86)\\Tencent\\WeChat\\WeChat.exe', 'gbk'); 22 23 // 获取文件属性大小 24 const size = version.GetFileVersionInfoSizeA(file, 0); 25 console.log('fileInfoSize: ' + size); 26 27 // 读取文件属性buffer 28 const buf =