Electron通過ffi-napi調用dll導出接口

electron使用ffi-napi環境搭建

附打包好的ffi-napi可以直接放到項目目錄下使用,避免以后麻煩

一、安裝node.js

Node.js官網:https://nodejs.org/zh-cn/download,選擇LTS長期穩定版本即可
在這里插入圖片描述

需要注意Node.js 區分32和64位,32位版本只能加載32位的DLL,64位的版本只能加載64位的DLL
建議下載x64,nodejs的位數決定后續electron以及node-gyp的位數,我剛開始想編譯win32但是一直編譯不通過報錯
報錯:npm error ‘“call”’ 不是內部或外部命令,也不是可運行的程序列或批處理文件。
安裝教程參考:https://www.runoob.com/nodejs/nodejs-install-setup.html
本來我在這里勾選了自動安裝Visual Studio Build Tools和Python。但是后面發現下載需要3G,太大了,而且我本來電腦上裝了VS2017,我想用自帶的,所以后面又取消安裝了。不知道這里直接安裝的話,會不會就少了后續很多麻煩。。。。
在這里插入圖片描述
cmd命令行查看安裝已成功
在這里插入圖片描述

二、安裝Electron

方法一:使用node原始包管理工具npm安裝。-g 全局安裝

npm install -g electron

方法二:使用淘寶提供的cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

然后使用cnpm安裝

cnpm install -g electron

安裝報錯:
在這里插入圖片描述

CERT_HAS_EXPIRED 錯誤通常是指在使用 HTTPS 協議進行請求時,SSL 證書已過期,導致請求失敗
解決https改為http在這里插入圖片描述
注意:直接使用npm install electron他會下載npm包管理中的較新版本的electron(例如v34.2.0)
在electron20.3.8之后調用C++動態庫會出現

Error: Error in native callback

原因:Electron 21 及更高版本將啟用 V8 內存隔離區,這將對一些原生模塊產生影響。
解決方案:降低electron版本,目前論壇大部分使用20.3.8(20.3.8版本太舊,我使用npm到國外官方網站下載,一直下載不成功…最后使用cnpm安裝成功的)

cnpm install electron@20.3.8

三、安裝ffi-napi

安裝python

選擇最新版本python3.13.2 64位
下載地址:https://devguide.python.org/versions/
安裝時記得勾選寫入環境變量
在這里插入圖片描述

安裝VS

VS2022 Community下載地址:https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=Community
我安裝的是vs2022 community(官方網站上寫的,不知道專業版可不可行)
查看ffi-napi官網描述如下:

安裝 Visual C++ 構建環境:
對于 Visual Studio 2019
或更高版本,請使用Visual Studio CommunityDesktop development with C++中的工作負載。對于
Visual Studio 2019 之前的版本,請使用選項安裝Visual Studio 構建工具Visual C++ buildtools
論壇上看到的
在這里插入圖片描述

我的系統時win10,并且我安裝VS2017時已經安裝了Windows 10 SDK, 所以我取消了默認的windows 11 SDK的安裝

安裝ffi-napi

此時安裝的軟件各個版本如下所示:
在這里插入圖片描述
安裝ffi-napi時會用到node-gyp編譯工具,他對vs版本匹配非常嚴格
安裝成功!!!!!
在這里插入圖片描述

四、引用ffi-napi模塊

  1. 主進程中:main.js
const { app, BrowserWindow, ipcMain} = require('electron');
const ffi = require('ffi-napi');
const ref = require('ref-napi');
const path = require('path');const dllPath = path.join(__dirname, './test_api-x64.dll');
//test為dll中導出的接口,第一個int為返回值類型,第二、三個是參數類型
const libm = ffi.Library(dllPath, {'test': ['int',[ 'int','int']]
});// 處理 IPC 消息
ipcMain.on('call-test', (event, args) => {const { a, b } = args;console.log('調用DLL函數 test,參數:', a, b);try {const result = libm.test(a, b);event.sender.send('test-result', { a, b, result });} catch (error) {console.error('DLL調用失敗:', error);event.sender.send('error', { message: 'DLL調用失敗', details: error.message });}
});
  1. 渲染進程render.js
const { ipcRenderer } = require('electron');const button_test = document.getElementById('button_test');
const textBox_result = document.getElementById('textBox');button_test.addEventListener('click', () => {const a = 5;const b = 6;ipcRenderer.send('call-test', { a, b });
});ipcRenderer.on('test-result', (event, data) => {textBox_result.value = `test(${data.a}, ${data.b}) = ${data.result}`;
});ipcRenderer.on('error', (event, data) => {alert(`錯誤: ${data.message}`);
});

五、其他問題

我在安裝過程中遇到了各種各樣的問題,這里記錄一下,看是否用得到

1. 安裝ffi-napi報錯。npm install ffi-napi

gyp ERR! find VS gyp ERR! find VS msvs_version not set from command
line or npm config gyp ERR! find VS running in VS Command Prompt,
installation path is: gyp ERR! find VS “C:\Program Files
(x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC” gyp
ERR! find VS - will only use this version gyp ERR! find VS could not
use PowerShell to find Visual Studio 2017 or newer gyp ERR! find VS
looking for Visual Studio 2015 gyp ERR! find VS - not found gyp ERR!
find VS not looking for VS2013 as it is only supported up to Node.js 8
gyp ERR! find VS gyp ERR! find VS
************************************************************** gyp ERR! find VS You need to install the latest version of Visual Studio
gyp ERR! find VS including the “Desktop development with C++”
workload. gyp ERR! find VS For more information consult the
documentation at: gyp ERR! find VS
https://github.com/nodejs/node-gyp#on-windows gyp ERR! find VS
************************************************************** gyp ERR! find VS gyp ERR! configure error gyp ERR! stack Error: Could not
find any Visual Studio installation to use gyp ERR! stack at
VisualStudioFinder.fail
(D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:121:47)
gyp ERR! stack at
D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:74:16
gyp ERR! stack at VisualStudioFinder.findVisualStudio2013
(D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:351:14)
gyp ERR! stack at
D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:70:14
gyp ERR! stack at
D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\find-visualstudio.js:372:16
gyp ERR! stack at
D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\util.js:54:7
gyp ERR! stack at
D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\lib\util.js:33:16
gyp ERR! stack at ChildProcess.exithandler
(child_process.js:390:5) gyp ERR! stack at ChildProcess.emit
(events.js:400:28) gyp ERR! stack at maybeClose
(internal/child_process.js:1088:16) gyp ERR! System Windows_NT
10.0.19045 gyp ERR! command “D:\soft\nodejs\node.exe” “D:\soft\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js”
“rebuild” gyp ERR! cwd D:\DemoCode\electronFFI\node_modules\ffi-napi
gyp ERR! node -v v14.21.3 gyp ERR! node-gyp -v v5.1.1 gyp ERR! not ok
npm WARN enoent ENOENT: no such file or directory, open
‘D:\DemoCode\electronFFI\package.json’ npm WARN electronFFI No
description npm WARN electronFFI No repository field. npm WARN
electronFFI No README data npm WARN electronFFI No license field.

npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! ffi-napi@4.0.3
install: node-gyp-build npm ERR! Exit status 1 npm ERR! npm ERR!
Failed at the ffi-napi@4.0.3 install script. npm ERR! This is probably
not a problem with npm. There is likely additional logging output
above.

npm ERR! A complete log of this run can be found in: npm ERR!
C:\Users\weidongcao\AppData\Roaming\npm-cache_logs\2025-02-11T07_45_19_949Z-debug.log

這里是說node-gyp找不到vs build tools,先確認你是否安裝了vs build tools,如果已經安裝了,網上搜索會讓你配置各種環境變量,都沒什么用,其實就是當前node-gyp版本和vs版本不匹配

2. 編譯x86報錯:’“call”’ 不是內部或外部命令,也不是可運行的程序或批處理文件。

這個感覺是32位下的一個bug,我目前沒有找到解決方案

3. 如果安裝失敗,管理員運行試一下
4. 實在不行就官網拉ffi-napi源碼,自己編譯

源碼地址:https://github.com/node-ffi-napi/node-ffi-napi
在ffi-napi目錄下直接編譯

node-gyp clean 
node-gyp configure --msvs_version=2022
node-gyp build

提示安裝addon

npm install node-addon-api

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70593.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70593.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70593.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

25工程管理研究生復試面試問題匯總 工程管理專業知識問題很全! 工程管理復試全流程攻略 工程管理考研復試真題匯總

工程管理復試面試心里沒底?別慌!學姐手把手教你怎么應對復試! 很多同學面對復試總擔心踩坑,其實只要避開雷區掌握核心技巧,逆襲上岸完全有可能!這份保姆級指南幫你快速鎖定重點,時間緊迫優先背…

深藍學院自主泊車第3次作業-IPM

目錄 1 題目介紹2 求解 1 題目介紹 已知魚眼相機的參數, image_width,表示圖像的寬度image_height,表示圖像的高度 ξ \xi ξ,表示魚眼相機參數 k 1 k_1 k1?、 k 2 k_2 k2?,表示徑向相機參數 p 1 p_1 p1?、 p 2 p…

核貨寶助力連鎖門店訂貨數字化轉型升級

在競爭激烈的連鎖零售行業,傳統訂貨模式弊端日益凸顯,嚴重制約著企業的發展。核貨寶訂貨系統以其卓越的數字化解決方案,為連鎖門店訂貨帶來了全方位的變革,助力企業實現數字化轉型升級,在市場中搶占先機。 一、增強總部…

2.最多提取子串數目(100分)-附帶Java逐行解析

題目 給定 [a-z],26個英文字母小寫字符串組成的字符串 A 和 B,其中 A 可能存在重復字母,B 不會存在重復字母,現從字符串 A 中按規則挑選一些字母,可以組成字符串B。 挑選規則如下: 同一個位置的字母只能挑…

AutoGen 技術博客系列 八:深入剖析 Swarm—— 智能體協作的新范式

本系列博文在掘金同步發布, 更多優質文章,請關注本人掘金賬號: 人肉推土機的掘金賬號 AutoGen系列一:基礎介紹與入門教程 AutoGen系列二:深入自定義智能體 AutoGen系列三:內置智能體的應用與實戰 AutoGen系列四&am…

力扣每日一題【算法學習day.132】

前言 ###我做這類文章一個重要的目的還是記錄自己的學習過程,我的解析也不會做的非常詳細,只會提供思路和一些關鍵點,力扣上的大佬們的題解質量是非常非常高滴!!! 習題 1.統計相似字符串對的數目 題目鏈…

C語言.h頭文件的寫法

頭文件的內容 #ifndef __SEQUENCE_LIST_H // 定義以防止遞歸包含 #define __SEQUENCE_LIST_H // (1)、其它頭文件 #include <stdio.h> #include <stdlib.h> #include <strings.h> #include <stdbool.h> // (2)、宏定義(函數、變量、常量) // (3)、…

Spring AI + Ollama 實現調用DeepSeek-R1模型API

一、前言 隨著人工智能技術的飛速發展&#xff0c;大語言模型&#xff08;LLM&#xff09;在各個領域的應用越來越廣泛。DeepSeek 作為一款備受矚目的國產大語言模型&#xff0c;憑借其強大的自然語言處理能力和豐富的知識儲備&#xff0c;迅速成為業界關注的焦點。無論是文本生…

自學Java-AI結合GUI開發一個石頭迷陣的游戲

自學Java-AI結合GUI開發一個石頭迷陣的游戲 準備環節1、創建石頭迷陣的界面2、打亂順序3、控制上下左右移動4、判斷是否通關5、統計移動步驟&#xff0c;重啟游戲6、拓展問題 準備環節 技術&#xff1a; 1、GUI界面編程 2、二維數組 3、程序流程控制 4、面向對象編程 ? \bulle…

C語言的內存分配:malloc和free

使用庫函數分配和管理內存。在運行時&#xff0c;分配更多的內存給程序使用&#xff0c;主要工具是malloc函數&#xff0c;這個函數接受一個參數&#xff1a;所需要要的內存字節數。malloc函數會找到合適的空閑內存塊&#xff0c;這樣的內存是匿名的&#xff0c;即malloc分配了…

本地安裝 Grafana Loki

本地安裝 Grafana Loki 一、 安裝 Loki1. 下載 Loki2. 創建 Loki 配置文件3. 創建 Loki 服務 二、安裝 Promtail1. 下載 Promtail2. 創建 Promtail 配置文件3. 創建 Promtail 服務 三、 安裝 Grafana四、啟動所有服務五、添加loki 數據源1. 添加儀表板2. 日志查詢面板 json 參考…

趣味數學300題1981版-十五個正方形

分析&#xff1a;移動兩根變成11個正方形很簡單&#xff1a; 移動4根變成15個正方形&#xff0c;分析&#xff1a; 一個田字格包含5個正方形&#xff0c;若要15個正方形需要3個田字格&#xff0c;如果3個田字格完全不重合&#xff0c;需要6*318根火柴。如果合并正方形的邊&…

IDEA——Mac版快捷鍵

目錄 按鍵含義常用組合代碼生成快捷鍵&#xff1a;代碼追蹤快捷鍵&#xff1a;高效編輯快捷鍵&#xff1a;代碼重構快捷鍵&#xff1a;工具類快捷鍵&#xff1a;常規文件操作快捷鍵&#xff1a; 按鍵含義 ? command Command鍵&#xff08;?&#xff09;相當于Windows中的Con…

基于Spring Boot的興順物流管理系統設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

Prompt:創造性的系統分析者

分享的提示詞&#xff1a; 你是一個創造性的系統分析者&#xff0c;作為咨詢師&#xff0c;你具有以下特質&#xff1a; 基礎能力&#xff1a; 深入理解我的系統性模式 識別模式間的隱藏聯系 發現出人意料的關聯 提供令人驚訝的洞見 工作方式&#xff1a; 在每次回應中至少…

Andorid 學習 Compose UI(1):Box

今天學習和實驗一下Android 的compose UI&#xff0c;寫一些很小的Demo實驗。下面和css 布局有點相似性。 如Box 看起來像html 當中的 div &#xff0c;compose UI 提供Modifier 很多設置。你會發現Text,Box,Row,Image等組件 都有這個屬性。我們處理任務包括對齊布局&#xff0…

Selenium實戰案例1:論文pdf自動下載

在上一篇文章中&#xff0c;我們介紹了Selenium的基礎用法和一些常見技巧。今天&#xff0c;我們將通過中國科學&#xff1a;信息科學網站內當前目錄論文下載這一實戰案例來進一步展示Selenium的web自動化流程。 目錄 中國科學&#xff1a;信息科學當期目錄論文下載 1.網頁內…

《炒股養家心法.pdf》 kimi總結

《炒股養家心法.pdf》這篇文章詳細闡述了一位超級游資炒股養家的心得與技巧&#xff0c;展示了其從40萬到10億的股市傳奇。以下是文章中炒股技巧和心得的詳細總結&#xff1a; 1.核心理念 市場情緒的理解&#xff1a;炒股養家強調&#xff0c;股市的本質是群體博弈&#xff0c…

2025年華為手機解鎖BL的方法

注&#xff1a;本文是我用老機型測試的&#xff0c;新機型可能不適用 背景 華為官方已經在2018年關閉了申請BL解鎖碼的通道&#xff0c;所以華為手機已經無法通過官方獲取解鎖碼。最近翻出了一部家里的老手機華為暢玩5X&#xff0c;想著能不能刷個系統玩玩&#xff0c;但是卡…

Perfectly Clear WorkBench深度解析:專業圖像處理軟件的高效應用

在圖像處理領域,面對照片曝光不足、色彩失真、細節模糊等常見問題,一款專業且高效的圖像處理軟件顯得尤為重要。今天,本文將為大家詳細介紹Perfectly Clear WorkBench這款圖像處理軟件,幫助大家更好地了解并應用其功能,提升照片質量。 一、智能圖像校正,解決常見問題 Pe…