qt调用外部库

本文介绍了如何在Qt中调用DLL(动态链接库)和LIB(静态库)。通过使用Visual Studio 2008创建DLL和LIB,并详细解释了在Qt项目中引入这些库的具体步骤。

    Qt调用外部程序分两种:调用dll(动态链接库)、调用lib(静态库)。下面分别介绍两种调用方法。

1、调用dll

  •  生成dll:这里我们利用VS2008,C++编程语言来生成dll。打开VS2008,创建->项目,选择“Win32项目”。名称可写“MyTestDll”

确定后点击“下一步”,然后选择Dll,附加选项中可选择“导出符号”,后点击【完成】。

在MyTestDll.h文件中可添加如下代码,我们定义一个两数相加函数来验证

在MyTestDll.cpp中写函数说明

编译,在对应的工程debug文件夹下就生成了dll文件

  • 调用

新建一Qt工程,这里我们选的是一控制台工程,新建过程不再赘述。

把生成的dll文件拷到Qt工程输出目录debug文件夹下,在main.cpp中引用QLibrary来实现(定义函数指针)

2、调用lib

在生成dll文件时默认会自动生成lib文件,如没生成。可点击【项目】->【属性】->【配置属性】->【常规】中的“配置类型”改为静态库(.lib),然后重新生成。


  •  调用

把MyTestDll.h、MyTestDll.lib拷到Qt工程目录下,把MyTestDll.dll拷到工程输出目录下;在工程.pro文件中加入:LIBS+=-L$$PWD/-lMyTestDll;main.cpp中添加代码如下:

即完成了调用。

QT6中调用外部库可以根据库的类型(静态库、动态库)采用不同的方法: ### 调用外部静态库 在Windows环境下,若要使用Qt6调用.a静态库,编译出的.a静态库需使用Qt6对应的gcc编译器,最好用mingw编译出.a文件,避免因gcc版本不兼容导致编译出错和函数调用失败问题,其调用方法与平常调用.dll文件类似[^2]。 ### 调用外部动态库 #### 隐式链接 把外部库的头文件(如MyTestDll.h)和导入库文件(如MyTestDll.lib)拷贝到Qt工程目录下,将动态链接库文件(如MyTestDll.dll)拷贝到工程输出目录下。然后在工程的.pro文件中加入如下内容: ```pro LIBS += -L$$PWD/ -lMyTestDll ``` 接着在main.cpp等源文件中添加必要的代码来使用该库。这种方式需要提前知道库的接口信息,并且要保证库文件的路径正确[^4]。 #### 显式链接 Qt提供了QLibrary类用于显式调用动态库。以下是一个完整的示例代码: ```cpp #include <QApplication> #include <QLibrary> #include <QDebug> #include <QMessageBox> #include "dll.h" //引入头文件 typedef int (*Fun)(int, int); //定义函数指针,以备调用 int main(int argc, char **argv) { QApplication app(argc, argv); QLibrary mylib("myDLL.dll"); //声明所用到的dll文件 int result; if (mylib.load()) //判断是否正确加载 { QMessageBox::information(nullptr, "OK", "DLL load is OK!"); Fun open = (Fun)mylib.resolve("add"); //援引 add() 函数 if (open) //是否成功连接上 add() 函数 { QMessageBox::information(nullptr, "OK", "Link to Function is OK!"); result = open(5, 6); //这里函数指针调用dll中的 add() 函数 qDebug() << result; } else QMessageBox::information(nullptr, "NO", "Link to Function is not OK!!!!"); } else QMessageBox::information(nullptr, "NO", "DLL is not loaded!"); return 0; //加载失败则退出 } ``` 此示例中,通过QLibrary类加载动态库,使用`load()`方法判断是否加载成功,使用`resolve()`方法获取库中函数的地址,最后通过函数指针调用库中的函数[^3]。 ### 调用外部EXE文件 若要在QT6中调用外部EXE文件,若将外部EXE文件嵌入到当前QT程序中,当外部EXE文件较大时,编译可能会报错,提示资源文件太大超过内存,因为资源文件存放在静态数组里。解决办法是在工程的.pro文件内添加`CONFIG += resources_big`。也可以通过相对路径调用外部EXE文件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值