因为老大的要求,须要把前端项目打包成客户端而且可以调用dll文件就要求我去作一下调研,我花了三天时间各类找资料各类翻github终于踩完了这些坑!tm差点都快抑郁了!这里来总结并给出一些个人解决方案吧,新鲜的 要趁热哦 -o -....html
在nodejs里有两种方式去调用dll文件:前端
第一种:若是有c++的开发经验就能够直接看 Electron使用NodeJS扩展模块调用DLL貌似也是官方推荐的方法,nodejs官网也提供了相关文档 文档连接node
第二种:经过node-ffi模块,如下内容都是讲经过这个模块去调用的,比较适合只作前端开发的同窗python
python(v2.7 ,3.x不支持);c++
visual C++ Build Tools,或者 (vs2015以上(包含15))git
.net framework 4.5.1 或者执行 (推荐)github
npm install --global --production windows-build-tools
(大家看哪一个方便,我是选了这个,会自动把python和c++开发工具包都集成进去)shell
2.安装node-gyp npm install -g node-gyp
接着安装 npm install ffi --save
“好戏”开始了:npm
node-gyp的其它使用者提出一种解决方案: node 版本 10.15以上结合着这个模块会有路径问题,解决方法须要回退node版本至8,或者对变量设置路径json
Windows: >set npm_config_node_gyp=C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js//我这里不能在powershell使用,命令不生效,cmd能够,这里设置你的实际路径)
TLS验证错误
set NODE_TLS_REJECT_UNAUTHORIZED=0
依旧是个set 命令
error:MSB4019:未找到导入的项目...(嗯,貌似又是路径的问题)
到这里我就放弃执行 npm install ffi --save
这个命令了,我直接从git仓库里面去拉这个模块。(要是没有该问题的话能够跳过此步骤)
git clone git://github.com/node-ffi/node-ffi.git
cd node-ffi
node-gyp rebuild //若是是在electron里面使用的话还须要加上参数
复制代码
在当前目录里新建一个app.js文件,代码以下:
const ffi = require("node-ffi");
const User32 = ffi.Library('user32', {
'GetWindowLongPtrW': ['int', ['int', 'int']],
'SetWindowLongPtrW': ['int', ['int', 'int', 'long']],
'GetSystemMenu': ['int', ['int', 'bool']],
'DestroyWindow': ['bool', ['int']]
})
console.log(User32.DestroyWindow(1000));//返回false
复制代码
执行node app.js
应该能在控制台里看到返回值哦 PS :若是还不行多是缺乏ref ref-struct 还有bingdings模块。按照提示下载便可,ref同ffi都须要在当前目录执行 node-gyp rebuild 而后再copy文件夹到nodemodules目录里。
若是直接在electron里面使用app.js的代码会报以下的错:
node-gyp rebuild -target=4.2.3 -arch=x64 --dist-url=https://atom.io/download/electron
后再把对应的包放到nodemoudles里面去就行了。可是大家在指定electron的版本时不要直接看package.json里的,我这里显示的是^4.0.1,下载的模块版本时>=4.0.1的因此不是实际的版本号。 在package.json里补充好以前经过rebuild后的依赖包信息,不然会报错,据其余网友说是打包的时候会从新下载这些依赖