报错如下:UnhandledPromiseRejectionWarning: Error: External buffers are not allowed

这是由于Electron的高版本已经不支持外部缓冲区,而ffi-napi在使用的过程中会创建外部缓冲区,这两个是冲突的。
如图,在nodejs的官方文档里提到过Electron不支持:https://nodejs.cn/api/v18/n-api/napi_create_external_arraybuffer.html

可以看到Electron v20版本以后就不支持了,具体不支持的原因可以看官方给出的本篇考量文章:https://www.electronjs.org/zh/blog/v8-memory-cage
评论区对这个改动意见很大,多人发表看法:https://github.com/electron/electron/issues/35801,用户表示只要升级了Electron版本,之前的扩展都不能用了,对用户的再次改造增加了很多工作量,希望官方解除不能创建外部缓冲区的禁锢,但是到目前为止,Electron官网基于安全性以及内存泄漏问题考虑,一直是禁止创建外部缓冲区,所以会报错。
然后我试了很多办法,比如在顶部加入NODE_API_NO_EXTERNAL_BUFFERS_ALLOWED,或者把malloc改为copy,这些都是在之前的文档里找到的解决办法。但是目前我用的"electron": "38.4.0"还是会报错,无法解决。
还有一种办法是让我把Electron的版本降到v20,但是由于我的项目是基于Electron搭建的,而且考虑到降低版本会不会导致里边的部分功能不完善,比如我的代码里调用了新版的函数,但是旧版没有。思考过后觉得降低Electron版本要改动的地方应该也不少,所以就没有尝试降低版本这一建议。
最终在评论区 (https://github.com/node-ffi-napi/node-ffi-napi/issues/238) 找到办法,弃用了 ffi-napi 改为了Koffi:

Koffi官网:https://koffi.dev/,里边介绍Koffi是ffi的延伸,也是为了去调用本地的dll,并且因为没有创建外部缓冲区,所以不会报错。
我完全卸载了ffi-napi相关的包以及调用代码,并且安装了Koffi进行重写代码,确实不会报External buffers are not allowed这个错误了。
反思:网上的很多教程比如使用ffi-napi,在几年前是可以使用的,但是随着搭配组件的的更新,比如说Electron的更新,就会导致里边的功能有冲突。所以在使用工具的时候,最好是新版对新版,旧版对旧版,才可以减少错误。