electron 加載C++擴展 調用 用C++擴展Electron(node-ffi版)


https://blog.csdn.net/wang839305939/article/details/83780789

https://blog.csdn.net/absurd/article/details/53856193  示例electron call c++ dll. 

https://www.cnblogs.com/silenzio/p/11606389.html

很多剛入門不久的小伙伴第一個問題可能就是electron能不能調用DLL動態庫?這里給一個明確的答復是可以的。為什么?因為electron本身就集成了nodejs運行環境,而nodejs又是用C++實現的,相當於C++是他的原配。
      既然能調用,那么第二個問題來了,怎么調用?nodejs在官網也給出了方案addon有興趣的可以看看,但是對於我們前端來說這個方案太過於復雜了,學習成本太高,如果沒有c++開發背景還是另辟蹊徑吧,electron是可以做到和C++混合開發的,如果團隊中有C++的開發人員也可以嘗試,結合C++本身的優勢,開發出來的產品效果可能會更好,我們常用的IDE工具VSCode其實有部分功能也是使用C++來時實現的,這其中規避了一些electron的缺點。另一種調用DLL動態庫的方案就是這里要重點介紹的模塊node-ffi。
      其實這個模塊時用起來非常的簡單,先貼一段官方使用案例,簡單加了幾句注釋:

var ffi = require('ffi');//引入ffi模塊
/*
 *使用ffi模塊將dll和js打通,可以把它看做是RPC(遠程調用協議)
 *@libm 動態庫的絕對地址例如"C://plugin/test.dll"
 *@ceil 動態庫中方法的名稱 double返回值的數據類型 ['double'] 這是函數輸入參數的數據類型
 *這里提一下,應為C++是是屬於強類型語言這個js不同,所以這里一定要指定返回參數和輸入參數的類型
*/
var libm = ffi.Library('libm', {
  'ceil': [ 'double', [ 'double' ] ]
});
//通過上面的注冊的libm對象來調用dll中的ceil方法
libm.ceil(1.5); // 2

Electron內置的node.js,理論上可以通過擴展node.js來擴展Electron。但是通常由於系統中存在的node.js與Electron內置的node.js的版本號不同,給node.js編譯的擴展是無法在Electron中使用的,需要一些特殊處理才行。

 ----------------------

electron 獲取命令行參數

丸子叮咚響 2018-10-23 09:03:34 3081 收藏
展開
一 實現

最近要做一個小工具,基於electron的獨立進程,從平台中雙擊圖標,能夠啟動electron,並且要攜帶一些必要的命令行參數。以為是個很簡單的實現,但發現electron的文檔中並沒有說明。最后在atom的討論網站中找到了一個答案,如下:

1 假如你傳的參數為arg1 arg2

2 在electron的主進程中

global.sharedObject = {prop1: process.argv}
3 在electron的渲染進程中

var remote = require('electron').remote,
arguments = remote.getGlobal('sharedObject').prop1;

console.log(arguments); // output : ["argv1", "argv2"]
完成。當然,上面的示例代碼可以靈活更改。
————————————————
版權聲明:本文為CSDN博主「丸子叮咚響」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/luoshabugui/article/details/83301698


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM