qt隐式加载VS2015生成的dll && 无法解析的外部符号_declspec(dllimport)

本文记录了一种在Qt环境下不使用QLibrary加载由VS2015生成DLL的方法。主要步骤包括安装MSVC2015 32位环境,确保DLL、LIB、头文件在同一目录,添加库路径到Qt项目,并解决因编码格式不同导致的编译错误。最终通过修改头文件编码格式成功解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于不想使用QLibrary,一直都在找最简单的办法。以下是我跑通的整个过程:

  1. 刚开始项目环境:VS2015生成的TestDll(以下简称TD),Qt只有mingw32环境;经过多次尝试都会报一堆头文件错误,最后尝试下载msvc2015环境去加载dll。

  2. 由于我是win7 32位环境,所以我又找到了一个5.8版本msvc2015环境,官网无法下载,可以看这里

  3. 安装MSVC2015需要配置调试器,这个网上攻略很多,我参考了这个链接。针对MSVC2015 32位的我已经下载下来放到百度网盘,提取码:sgld,下载出来直接安装就行。

  4. 安装后,先把之前VS2015生成的TD.dll、TD.lib、TD.h(头文件要在创建VS项目时选择导出符号)放到一个API文件夹里,这个文件夹就是我们要用到的全部了。

  5. 新建Qt项目,右键项目名-添加库-添加外部库-只选择windows平台,然后windows三个选项全部不选,最后选库路径。把API文件夹复制到pro文件同一路径下,然后在选中这个路径的TD.lib就行。
    1

  6. 只需要选择库文件路径,包含路径会自动生成。添加成功后,pro文件会出现下列代码

win32: LIBS += -L$$PWD/API/ -lTD

INCLUDEPATH += $$PWD/API
DEPENDPATH += $$PWD/API
  1. 在需要使用dll的文件夹里直接include,就可以使用了,一般来说Qt类里该头文件处于__declspec(dllimport)状态,可以自己打开检查下。
#include "API/TD.h"
  1. 到这一步已经可以直接调用了,但是我会报无法解析的__declspec(dllimport)错误,经过多次测试搜索,到最后用了QLibrary还是在报错。最后发现问题出在编码格式上,我的VS2015默认编码格式ANSI,Qt也是ANSI,但VS2015生成的动态库头文件编码格式是UTF-8。编码格式可以通过记事本-打开-另存为查看,将TD.h文件使用Nodepad++修改格式后,编译通过。
  2. 这种方式很方便,只需要引入一个头文件就可以调用。我的环境是成功的,此文章仅供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值