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源創計劃”,歡迎正在閱讀的你也加入,一起分享。