Electron通過node-ffi呼叫C++dll
ffi安裝與呼叫
安裝node-gyp
安裝前提條件
python(v2.7 ,3.x不支援);
visual C++ Build Tools,或者 (vs2015以上(包含15))
.net framework 4.5.1
如果是乾淨的環境可以用下面命令一鍵安裝
npm install --global --production windows-build-tools
安裝命令
npm install -g node-gyp
遇到問題
python找不到或者環境不對
檢視命令列python是否可用,如果不可用,設定path.確定命令列可用。多版本的可以參考網上相關教程進行設定
命令列可用。可以通過下面命令設定
npm config set python D:\Library\Python\Python27\python.exe
如果不行執行下面的
node-gyp configure --python v2.7.3 --verbose
node-gyp rebuild 出錯
重灌node-gyp
依次執行下面的命令
npm uninstall node-gyp -g npm i -g windows-build-tools# 環境已用不用執行 npm install -g node-gyp npm iconfig set python python npm i microtime --save-dev
提示找不到系統SDK
安裝對應的SDK 或者強行設定為當前系統安裝的SDK。
node-gyp 配置錯誤
設定代理埠
--proxy=http://myproxyurl/
或者
npm config set registry http://registry.npmjs.org/
提示https超時或者異常
改用http請求
npm config set registry http://registry.npmjs.org/ npm config get registry # 確定是不是http,有時設定可能失敗,原因未知
msBuild.exe錯誤
設定vs版本
npm install --msvs_version=2013 npm install--msvs_version=auto #上一句不行試一下這一句
也可能是node,npm版本不匹配,可以更新一下版 本
npm install npm -g
這裡說一個強行更新版本的方式 ,找到package.json打到對應的模組更改版本號,然後執行
npm install
如果一切設定不對可以嘗試下面命令
node-gyp configure --verbose
安裝ffi 也可能叫node-ffi
前提條件要安裝node-gyp
執行命令安裝
npm install ffi
如果命令安裝不成功可能是windows沒有安裝gcc,可以下載安裝
如果還不成功可以下原始碼自己編譯安裝
原始碼地址
如果用git可以執行下面的命令
git clone git://github.com/node-ffi/node-ffi.git cd node-ffi node-gyp rebuild
如果上面的成功就可以把這個模組拷到node_mouduble可以直接使用。但是Electron還不行還要用Electron編譯一下
如果原始碼都無法跑通,那只有具體問題具體分析了。看看是不是沒有許可權,是不是一些關鍵的資料夾沒有建立。這時可以手動建立etc
Electron引用手動編譯的ffi
相關知識點介紹,手動編譯為第三種模式
然後可以執行下面的命令,一定要在模組當前目錄下面執行,不然會找不到bindings檔案
node-gyp rebuild --target=1.7.9 --arch=x64 --target_arch=x64 --dist-url=https://atom.io/download/electron
引數說明 target對應electron版本
arch 對應32還是64
後面的網址會下electron對應的標頭檔案,如果地址不行多嘗試,多嘗試,如果還是不行那可以考慮淘寶
https://npm.taobao.org/mirrors/atom-shell
可能遇到的問題
%1 is not a valid Win32 application npm rm node-sass npm install node-sass
electron重新編譯不通過可能少下面的模組,可以全域性安裝也可以僅安裝當前專案
npm install nan
npm install ref
npm install ref-array
把program.exe的錯誤可能是node.js安裝不正確或者配置不正確
vscode 擴充套件意外死亡
可能是Git擴充套件的問題,刪除一下
如果git刪除了還是不行,可能是node.js環境配置不對,我這裡出現的問題排程node.js會出這個問題,可是node.js擴充套件是整合的。所以不可能不用,所以要重置
node.js 刪除乾淨,一定要乾淨。
動態庫的呼叫
引用ffi模組和宣告對應的型別,char* 可以直接傳String
var ffi = require('node-ffi') var ref = require('ref'); var ArrayType = require('ref-array') var intPtr = ref.refType('int'); var floatPtr=ref.refType('float'); var float=ref.types.float; var floatArray = ArrayType(float);
引用和指標型別的單個變數可以如下
var outNumber = ref.alloc('float'); var actualNumber = outNumber.deref();
可以像js方法一相export讓別人呼叫
exports.User32 = ffi.Library('user32', { 'GetWindowLongPtrW': ['int', ['int', 'int']], 'SetWindowLongPtrW': ['int', ['int', 'int', 'long']], 'GetSystemMenu': ['int', ['int', 'bool']], 'DestroyWindow': ['bool', ['int']] });
陣列的相關用法可以參考這個地址
其它值型別和其它引用型別可以參考這個ref
常見錯誤
連結錯誤
這一類的錯誤一般要不就是dll沒有找到要不就是dll有依賴其它的dll,可以參考錯誤編碼
引用錯誤,可以在模組當中用很折模組引用了ref,可能都要通過electron進行編譯
下載地址:http://download.csdn.net/download/liyangyang08/10163491