guo*_*owy 7 javascript ffi node.js electron
我有一个简单的电子应用程序,试图用来ffi-napi调用 dll 文件,但在运行电子构建时收到“本机回调错误”。这是我的设置:
包.json
{
"name": "electron-test",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron .",
"postinstall": "electron-builder install-app-deps",
"dist": "electron-builder"
},
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "^23.1.2",
"electron-builder": "^23.6.0"
},
"dependencies": {
"ffi-napi": "^4.0.3"
},
"build": {
"appId": "electron-test",
"win": {
"target": "portable"
},
"asar": false
}
}
Run Code Online (Sandbox Code Playgroud)
main.js
const { app, BrowserWindow } = require('electron')
const ffi = require('ffi-napi');
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600,
})
win.loadFile('index.html')
}
app.whenReady().then(() => {
createWindow()
})
Run Code Online (Sandbox Code Playgroud)
和index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'" />
<title>Hello from Electron renderer!</title>
</head>
<body>
<h1>Hello from Electron renderer!</h1>
<p></p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我按顺序运行了这些:
npm i它安装模块并在ffi-napi包上运行构建脚本npm run start并收到此错误:
App threw an error during load
Error: Error in native callback
at process.func [as dlopen] (node:electron/js2c/asar_bundle:2:1822)
at Module._extensions..node (node:internal/modules/cjs/loader:1259:18)
at Object.func [as .node] (node:electron/js2c/asar_bundle:2:1822)
at Module.load (node:internal/modules/cjs/loader:1044:32)
at Module._load (node:internal/modules/cjs/loader:885:12)
at f._load (node:electron/js2c/asar_bundle:2:13330)
at Module.require (node:internal/modules/cjs/loader:1068:19)
at require (node:internal/modules/cjs/helpers:103:18)
at load (C:\workspace\temp\node_modules\node-gyp-build\node-gyp-build.js:22:10)
at Object.<anonymous> (C:\workspace\temp\node_modules\ref-napi\lib\ref.js:8:53)
Run Code Online (Sandbox Code Playgroud)
我不确定如何解决这个问题,任何帮助将不胜感激。谢谢。
这是 Electron 20.3.8 版本之后的一个 BUG/FEATURE。
该团队添加了一个沙箱,任何尝试使用指针从内存读取的内容(即已ref-napi被使用过的指针ffi-napi)都会使电子崩溃。
https://github.com/electron/electron/issues/35801
https://www.electronjs.org/blog/v8-memory-cage
目前,似乎唯一的解决方案是继续使用20.3.8版本,直到讨论结束。
解决方法可以是使用https://www.npmjs.com/package/@lwahonen/ffi-napi https://www.npmjs.com/package/@lwahonen/ref-napiffi-napi的分支ref-napi
如此处所述: https:
//github.com/node-ffi-napi/node-ffi-napi/issues/238#issuecomment-1461642322
但看来我们必须等到电子团队解决这个问题或者创建一个官方的解决方法。
| 归档时间: |
|
| 查看次数: |
2979 次 |
| 最近记录: |