electron-vue跨平臺桌面應用開發實戰教程(七)-ffi調用C++(macOS平臺)


electron功能很強大,但是有一些跟操作系統底層交互的功能,electron無法實現,這個時候我們就可以調用原生來配合完成對應功能,本文主要講解在macOS平臺下,調用C++的dylib文件

在開始之前我們要安裝

1.node-gyp

npm install node-gyp -g

使用ffi-napi調用dll(c++)

1. 安裝ffi-napi

執行

npm install ffi-napi --save

2. 準備C++動態鏈接庫libdemo.dylib文件

libdemo.dylib文件可以去gitee中獲取,也可以自己編譯

gcc -g -shared  demo.cpp -o libdemo.dylib

electron-vue-demos gitee 地址

3. 調用libdemo.dylib文件中的方法

這裏dll是找的別的寫好的,dylib是我自己寫的

let cpplib
if (process.platform === 'darwin') {
// 在使用libdemo的時候最好自己編譯下cpp,命令gcc -g -shared demo.cpp -o libdemo.dylib
let libPath
// 在這兒需要判斷下是開發環境還是打包環境,在mac上這兩個環境用的路徑不一樣
if (process.env.NODE_ENV === 'development') {
libPath = path.resolve('resources/dll/libdemo')
} else {
libPath = path.join(__dirname, '..') + '/dll/libdemo'
}

cpplib = ffi.Library(libPath, {
Add: ['double', ['double', 'double']]
})
} else if (process.platform === 'win32') {
cpplib = ffi.Library(path.resolve('resources/dll/MyDLL'), {
Add: ['float', ['float', 'float']],
Hello: ['string', []],
StrLength: ['int', ['string']]
})
}

這裏需要注意的點就是mac獲取dylib的路徑,開發環境和打包環境的路徑是不一樣的,在這兒需要特殊處理下

調用方法

// dll和dylib提供了不同的方法,所以在這兒不能通用,但是寫了各自的調用方法
if (process.platform === 'win32') {
console.log('fii.Library Hello result:', cpplib.Hello())
console.log('fii.Library Add result:', cpplib.Add(1, 2))
console.log('fii.Library Add result:', cpplib.StrLength('hello world'))
}
if (process.platform === 'darwin') {
console.log(cpplib.Add(12345, 54321))
}

更多內容請關注公衆號(自增程序員)

本文分享自微信公衆號 - 自增程序員(javaipp)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章