请教 electron 调用 dll 报错的问题

288 天前
 ameizing
需求背景是用 electron 写个 app ,调用硬件厂家提供的 dll 和硬件通信。

一开始用 ffi-napi 加载 dll ,排除路径参数和 dll 架构位数问题后,总是报一个 native callback xxx 的错误,
查了一下得知是 electron 在 20.3.8 之后开启了一个什么内存上的限制导致,可以降级 electron 版本,
或者使用别人 fork 修改过的 ffi-napi 以及 koffi 来避免。

看到 ffi-napi 很久没更新了,就没降级 electron ,改用 koffi 加载厂家给的测试 dll ,其中只有一个 sum 函数,
成功调用。但是后续给过来硬件相关的 dll ,就总是加载失败,koffi 提示“Failed to load shared library:找不到指定的模块”,换成 fork 版本的 ffi-napi (也能正常调用 sum dll )则提示 win32 error 126 。
google 一下说是 dll 有缺失的依赖,教我用 dependency walker 看缺了什么。看了一下缺了 QT5CORE ,QT5NETWORK 这些,厂家开发说他们是用 qt5 编译的 dll ,并把缺的这些 dll 发给了我,放到了调用 dll 的同级目录下,结果还是报错。

和一个朋友讨论的时候,他用 python 的 ctypes.CDLL 就加载成功了,在 electron 里面总是不行。

有没有熟悉这方面的大佬说下解决问题的思路方向是什么,愿意付费咨询
1795 次点击
所在节点    Node.js
17 条回复
nebel
288 天前
用 ffi ,高版本 electron 绕不过去,那些 fork 的 ffi 也难跑通,我项目上之前抽象的隔离,简单改了依赖就几点 koffi 了,用着还好
dll 126 有的情况是缺失,有的情况是 32/64 的版本不对。
coolrice1
288 天前
dependency walker 还是报缺 dll?
nebel
288 天前
加我 vx:bWVuZWJlbA==
nebel
288 天前
你以前有安装 c++的环境么,可以安装下
有些 dll 深度依赖系统的一些 dll ,这些 dll 一般需要额外安装:
可以搜索了先安装下: 微软 VC++运行库合集_2022.01.23
nebel
288 天前
本地装了 git 的话,其 bin 目录下有个 ldd ,可以用 ldd xxx.dll 命令执行,然后看下 dll 依赖。
ameizing
288 天前
@nebel 加你啦,应该不是位数的问题,这在前面测试加法函数 dll 时踩过坑了,特意提醒对方后续编译时要给我 64 位的。
装了 vs2017 ,这个够用吗?项目最开始在 npm install 时 node gyp 装不起来,windows-build-tools 又提示现在的 node 版本不需要它了,这才去装了 python 和 vs2017
ameizing
288 天前
@coolrice1 一级依赖补齐了,可能是依赖的依赖还有缺
wjx0912
288 天前
qrobot
288 天前
@ameizing 直接帮你编译 electron 可用的库, 但是只能在 main 进程调用, 如果你觉得可以, 欢迎留下微信,我帮你写好 electron 的模块你直接调用即可
wow46687
288 天前
@wjx0912 #8 是用的 koffi
nomagick
288 天前
感谢这个贴让我知道了 koffi, 连夜把祖传的 napi-ffi 给换掉了,清除了一块心病
nevermoreluo
288 天前
我咋感觉像是厂家的锅,他们根本就没测试自己给的 dll 缺什么依赖就发你了吧。。。如果你们是甲方,联系一下产品经理,试试让厂家提供一个不在 qt 里面编译的 c++加载他们给的动态库的 demo, 他们就知道缺啥要给你啥了


不然就你这么试。。。qt...可是有一大堆依赖的。。。不过用 qt 打外部调用的 dll 的我还是第一次见。。。可能我孤陋寡闻了吧。。。
ameizing
287 天前
@nevermoreluo 确实是他们的锅,但是厂家的技术水平也不是很高,今天沟通过了,他们说暂时解决不了这个依赖问题,打算改成提供 exe 给我们了。。。
ameizing
287 天前
@qrobot 感谢大佬提供方案,厂家改成提供 exe 给我们调用了
ameizing
287 天前
@nomagick 确实,ffi-napi 很久没更新了,用着慌死了,还不兼容高版本 electron
zhangyuang
272 天前
https://github.com/zhangyuang/node-ffi-rs 试试,我是作者,有问题直接提 issue ,第一时间回复
zhangyuang
272 天前
已经在腾讯内部 electron 落地了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1023034

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX