Qt调用Matlab 生成的dll文件进行编程
编程时候我新建了三个平行ui界面,
但是我发现每次都只能用其中的一个ui界面来调用一个dll函数,当切换到另一个ui,打算调用另一个函数时,程序经常会闪退,请问这是为什么
编程时候我新建了三个平行ui界面,
但是我发现每次都只能用其中的一个ui界面来调用一个dll函数,当切换到另一个ui,打算调用另一个函数时,程序经常会闪退,请问这是为什么
在这个问题中,关键点是如何优化调用Matlab生成的dll文件,以及如何解决在多个UI界面中调用dll函数导致程序闪退的问题。针对第一个问题,可以考虑将dll文件放到exe文件的同级目录下,这样程序就能够找到动态库,避免程序崩溃的问题。对于第二个问题,可以考虑在每个UI界面中单独调用dll函数,避免多个界面同时调用所带来的问题。具体实现可以参考以下步骤:
将dll文件放到exe文件的同级目录下,避免程序崩溃的问题。
在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
。
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函数。