electron經過node-ffi調用dll文件

因爲老大的要求,須要把前端項目打包成客戶端而且可以調用dll文件就要求我去作一下調研,我花了三天時間各類找資料各類翻github終於踩完了這些坑!tm差點都快抑鬱了!這裏來總結並給出一些個人解決方案吧,新鮮的 要趁熱哦 -o -....html

在nodejs裏有兩種方式去調用dll文件:前端

第一種:若是有c++的開發經驗就能夠直接看 Electron使用NodeJS擴展模塊調用DLL貌似也是官方推薦的方法,nodejs官網也提供了相關文檔 文檔連接node

第二種:經過node-ffi模塊,如下內容都是講經過這個模塊去調用的,比較適合只作前端開發的同窗python

image.png
1.切換成淘寶源,安裝相關的環境依賴

  • 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

  • cannot find moudule(環境變量的路徑有問題)
    image.png

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驗證錯誤

    image.png
    github.com/nodejs/node… (解決方案,取消TLS證書驗證)

    set NODE_TLS_REJECT_UNAUTHORIZED=0 依舊是個set 命令

  • error:MSB4019:未找到導入的項目...(嗯,貌似又是路徑的問題)

    image.png

到這裏我就放棄執行 npm install ffi --save 這個命令了,我直接從git倉庫裏面去拉這個模塊。(要是沒有該問題的話能夠跳過此步驟)

git clone git://github.com/node-ffi/node-ffi.git
cd node-ffi
node-gyp rebuild //若是是在electron裏面使用的話還須要加上參數
複製代碼

image.png
終於生成代碼了,我這裏沒有報錯只是給了些警告,我這裏能夠無論它,直接把該文件夾copy到nodemodules中。 接着嘗試一下nodejs裏能不能調用到dll文件裏的方法。

在當前目錄裏新建一個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的代碼會報以下的錯:

    image.png
    經過rebuild編譯出來的包node版本和electron裏的Node版本不一致,在編譯這些包時應該指定electron版本。 執行 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後的依賴包信息,不然會報錯,據其餘網友說是打包的時候會從新下載這些依賴

    image.png

相關資料

blog.csdn.net/liyangyang0…

blog.csdn.net/wang8393059…

相關文章
相關標籤/搜索