Autumnan7 2023-05-17 21:59 采纳率: 0%
浏览 58

Qt调用Matlab

Qt调用Matlab 生成的dll文件进行编程

编程时候我新建了三个平行ui界面,

img

但是我发现每次都只能用其中的一个ui界面来调用一个dll函数,当切换到另一个ui,打算调用另一个函数时,程序经常会闪退,请问这是为什么

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-18 20:15
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      在这个问题中,关键点是如何优化调用Matlab生成的dll文件,以及如何解决在多个UI界面中调用dll函数导致程序闪退的问题。针对第一个问题,可以考虑将dll文件放到exe文件的同级目录下,这样程序就能够找到动态库,避免程序崩溃的问题。对于第二个问题,可以考虑在每个UI界面中单独调用dll函数,避免多个界面同时调用所带来的问题。具体实现可以参考以下步骤:

      1. 将dll文件放到exe文件的同级目录下,避免程序崩溃的问题。

      2. 在Qt中导入dll文件,具体步骤如下:

      a. 新建一个项目,选择“库” -> “Qt库” -> “Qt Widgets应用(CLASS Library)”,并修改项目类型为共享库。

      b. 自定义项目名称以及项目路径。

      c. 在导出类的头文件上加入以下代码:

         ```
         #if defined(YOURLIBRARY_LIBRARY)
         #  define YOURLIBRARYSHARED_EXPORT Q_DECL_EXPORT
         #else
         #  define YOURLIBRARYSHARED_EXPORT Q_DECL_IMPORT
         #endif
         ```
      

      d. 在类定义加入 class YOURLIBRARYSHARED_EXPORT YourLibraryClass

      1. 对于多个UI界面调用同一个dll函数导致闪退的问题,可以考虑在每个UI界面中单独调用dll函数,避免多个界面同时调用所带来的问题。具体实现步骤如下:

      a. 在UI界面上添加一个按钮,并给这个按钮添加对应的槽函数。

      b. 在槽函数中调用dll函数,对应实现代码如下:

         ```
         #include <QLibrary>
         // 加载dll文件
         QLibrary lib("yourdll.dll");
         // 获取dll函数指针
         typedef int(*myFuncType)(int);
         myFuncType myFunction = (myFuncType)lib.resolve("myFunction");
         // 调用dll函数
         int result = (*myFunction)(inputParam);
         ```
      

      c. 重复以上步骤,在每个UI界面中单独调用所需要的dll函数。

      综上所述,优化调用Matlab生成的dll文件可以考虑将dll文件放到exe文件的同级目录下;解决多个UI界面中调用dll函数导致程序闪退的问题可以在每个UI界面中单独调用所需要的dll函数。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月17日