Qt如何调用VS编写的动态链接库(dll文件)
在最近的开发中需要做了demo,来验证公司的老项目能否在Qt上做重新开发;于是碰到的第一个问题那就是dll文件如何加载了;网上查阅了很多资料,记录一下已成功加载dll文件的方法,以防遗忘。
下面是我在VS编译器上写的一个简单的dll文件,关于dll文件如何编写,我就不再赘述了。
.h文件
#ifndef _MYDLL_H #define _MYDLL_H #ifdef MYDLL_EXPORTS #define MYDLL_API __declspec(dllexport) #else #define MYDLL_API __declspec(dllimport) #endif extern "C" MYDLL_API int add(int a, int b); #endif
.cpp文件
#include "mydll.h" extern "C" MYDLL_API int add(int a, int b) { return (a + b); }
编译成功后,会得到下面三个文件,mydll.h、MyDll.lib、MyDll.dll
然后打开Qt创建一个项目;我是把这三个文件全部拷贝到了运行工作目录;如下所示:
下面介绍一下Qt如何隐式调用dll文件:
打开.Pro文件
在工程文件中包含.h文件的路径以及库文件的路径即可,下面就是如何调用库文件中的函数了:
#include <QDebug> #include <QLibrary> #include "mydll.h" //包含头文件 int main() { qDebug() << add(10, 20); return 0; }
上述是隐式调用库文件的函数,还有一种显示调用方法,如下所示:
#include <QDebug> #include <QLibrary> #include "mydll.h" //包含头文件 typedef int(*pFun)(int, int); int main() { QLibrary mydll("MyDll.dll"); if(!mydll.load()) { qDebug() << "load dll error"; } else { qDebug() << "load dll success"; pFun myAdd = (pFun)mydll.resolve("add"); if(myAdd){ qDebug() << myAdd(1, 10); } else { qDebug() << "get Function address error"; } } if(mydll.isLoaded()) { mydll.unload(); } return 0; }
相较而言,隐式调用比显示调用更加简洁,通常都是选择隐式调用更为合适。
当然,在配置库文件的路径时,也可以选择用相对路径的方式,如下所示:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器