在 nodejs
/ elctron
中,可以通過 node-ffi ,通過 Foreign Function Interface
調(diào)用動態(tài)鏈接庫罐呼,俗稱調(diào)DLL鞠柄,實現(xiàn)調(diào)用C/C++代碼,從而實現(xiàn)許多node不好實現(xiàn)的功能弄贿,或復用諸多已實現(xiàn)的函數(shù)功能春锋。
node-ffi是一個用于使用純 JavaScript 加載和調(diào)用動態(tài)庫的Node.js插件。它可以用來在不編寫任何C ++代碼的情況下創(chuàng)建與本地DLL庫的綁定差凹。同時它負責處理跨JavaScript和C的類型轉(zhuǎn)換期奔。
與 Node.js Addons
相比,此方法有如下優(yōu)點:
與 Node.js Addons 相比危尿,此方法有如下優(yōu)點:
- 不需要源代碼呐萌。
- 不需要每次重編譯
node
,Node.js Addons
引用的.node
會有文件鎖谊娇,會對`electron應用熱更新造成麻煩肺孤。- 不要求開發(fā)者編寫C代碼,但是仍要求開發(fā)者具有一定C的知識济欢。
復制代碼
缺點是:
- 性能有折損
- 類似其他語言的FFI調(diào)試赠堵,此方法近似黑盒調(diào)用,差錯比較困難法褥。
復制代碼
安裝
node-ffi
通過 Buffer
類茫叭,在C代碼和JS代碼之間實現(xiàn)了內(nèi)存共享,類型轉(zhuǎn)換則是通過 ref半等、 ref-array 揍愁、 ref-struct 實現(xiàn)。由于 node-ffi
/ ref
包含C原生代碼杀饵,所以安裝需要配置Node原生插件編譯環(huán)境莽囤。
npm install ffi
npm install ref
npm install ref-array
npm install ref-struct
解決辦法
下面是可能出現(xiàn)的問題及解決辦法
我這里遇到的問題是
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:269:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Linux 3.19.0-26-generic
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/node_modules/ws/node_modules/utf-8-validate
gyp ERR! node -v v0.12.4
gyp ERR! node-gyp -v v2.0.2
gyp ERR! not ok
解決辦法
$ npm cache clean
$ rm -rf node_modules
$ rm -rf ~/.node-gyp
刪除當前用戶目錄下的.node-gyp文件夾及.npmrc文件