[雜亂]Electron通過node-ffi調用C++dll

Electron通過node-ffi調用C++dll

ffi安裝與調用

安裝node-gyp

  1. 安裝前提條件
  2. 如果是乾淨的環境可以用下面命令一鍵安裝
npm install --global --production windows-build-tools
  1. 安裝命令
npm install -g node-gyp

遇到問題

  1. python找不到或者環境不對
    • 查看命令行python是否可用,如果不可用,設置path.確定命令行可用。多版本的可以參考網上相關教程進行設置
    • 命令行可用。可以通過下面命令設置
npm config set python D:\Library\Python\Python27\python.exe

如果不行執行下面的

node-gyp configure --python v2.7.3 --verbose
  1. 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
  1. 提示找不到系統SDK
    • 安裝對應的SDK 或者強行設置爲當前系統安裝的SDK。
  2. node-gyp 配置錯誤
    • 設置代理端口
--proxy=http://myproxyurl/
或者
npm config set registry http://registry.npmjs.org/
  1. 提示https超時或者異常
    • 改用http請求
npm config set registry http://registry.npmjs.org/
npm config get registry # 確定是不是http,有時設置可能失敗,原因未知
  1. msBuild.exe錯誤
    • 設置vs版本
npm install --msvs_version=2013
npm install --msvs_version=auto #上一句不行試一下這一句
  • 也可能是node,npm版本不匹配,可以更新一下版 本
npm install npm -g
  • 這裏說一個強行更新版本的方式 ,找到package.json打到對應的模塊更改版本號,然後執行
npm install
  1. 如果一切設置不對可以嘗試下面命令
node-gyp configure --verbose

安裝ffi 也可能叫node-ffi

  1. 前提條件要安裝node-gyp
  2. 執行命令安裝
npm install ffi
  1. 如果命令安裝不成功可能是windows沒有安裝gcc,可以下載安裝
  2. 如果還不成功可以下源碼自己編譯安裝
    • 源碼地址
    • 如果用git可以執行下面的命令
git clone git://github.com/node-ffi/node-ffi.git
 cd node-ffi
 node-gyp rebuild
  • 如果上面的成功就可以把這個模塊拷到node_mouduble可以直接使用。但是Electron還不行還要用Electron編譯一下
    1. 如果源碼都無法跑通,那只有具體問題具體分析了。看看是不是沒有權限,是不是一些關鍵的文件夾沒有創建。這時可以手動創建etc

Electron引用手動編譯的ffi

  1. 相關知識點介紹,手動編譯爲第三種模式
  2. 然後可以執行下面的命令,一定要在模塊當前目錄下面執行,不然會找不到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. %1 is not a valid Win32 application
npm rm node-sass
npm install node-sass
  1. electron重新編譯不通過可能少下面的模塊,可以全局安裝也可以僅安裝當前項目
npm install nan
npm install ref
npm install ref-array
  1. 把program.exe的錯誤可能是node.js安裝不正確或者配置不正確
  2. 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

面對未知嘗試是我們唯一能做的事情

發佈了80 篇原創文章 · 獲贊 13 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章