Qt调用Matlab

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

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

img

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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自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函数。


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

原因是每次闪退都是鼠标关闭了显示的Figure窗口,在Matlab中将其隐藏即可完成