ameizing
V2EX  ›  Node.js

请教 electron 调用 dll 报错的问题

  •  
  •   ameizing · Mar 12, 2024 · 3121 views
    This topic created in 817 days ago, the information mentioned may be changed or developed.
    需求背景是用 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 里面总是不行。

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


    不然就你这么试。。。qt...可是有一大堆依赖的。。。不过用 qt 打外部调用的 dll 的我还是第一次见。。。可能我孤陋寡闻了吧。。。
    ameizing
        13
    ameizing  
    OP
       Mar 13, 2024 via Android
    @nevermoreluo 确实是他们的锅,但是厂家的技术水平也不是很高,今天沟通过了,他们说暂时解决不了这个依赖问题,打算改成提供 exe 给我们了。。。
    ameizing
        14
    ameizing  
    OP
       Mar 13, 2024 via Android
    @qrobot 感谢大佬提供方案,厂家改成提供 exe 给我们调用了
    ameizing
        15
    ameizing  
    OP
       Mar 13, 2024 via Android
    @nomagick 确实,ffi-napi 很久没更新了,用着慌死了,还不兼容高版本 electron
    zhangyuang
        16
    zhangyuang  
       Mar 28, 2024
    https://github.com/zhangyuang/node-ffi-rs 试试,我是作者,有问题直接提 issue ,第一时间回复
    zhangyuang
        17
    zhangyuang  
       Mar 28, 2024
    已经在腾讯内部 electron 落地了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6024 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 03:20 · PVG 11:20 · LAX 20:20 · JFK 23:20
    ♥ Do have faith in what you're doing.