QT创建动态库,可用于其他程序调用(无界面不需要事件循环)

前言

这里是准备分享一下自己遇到的问题,发现CSDN基本没有关于这么简单问题的分析,大多也是转载,所以记录分享下。解决问题的过程中,看了很多文章,本文中有借鉴的可能忽略批注了,可以留言提醒。

问题:QT封装的动态库,不能够正常被win程序/MFC程序调用

问题的起因:因为工作需要写一个操作注册表的库。一位前辈之前有写过注册表的操作,大致是用MFC写的,然后在win7系统下操作注册表存在权限问题无法修改注册表,而我个人用QT多些准备用QT写操作注册表的库。并验证QT操作注册表是否有同样问题。

QSettings提供操作注册表及ini文件的接口,花了一天的时间了解注册表并验证通过,能够正常操作注册表。之后便是用QT封装成动态库,并用win程序/MFC程序调用进行验证

事情就在此处进入了瓶颈,封装好的动态库仅能被QT程序调用不能被win程序/MFC程序等其他程序调用。想到可能是无法识别QSettings,到此处就卡壳了,查了一下网上的资料也大多是讲“借助qtwinmigrate,建立事件循环,实现外部程序调用带QT界面的DLL。”这样才能够被其他程序调用

关于qtwinmigrate的说明:(54条消息) MFC 下调用Qt编写的含界面的dll_meether-CSDN博客_mfc调用qt窗口

【转】将QT开发的界面程序封装成DLL,在VC中成功调用 - 柳北风儿~~~~~~~欲宇仙炅 - ITeye博客

一、借助qtwinmigrate写DLL(可被qt之外的其他程序调用)

可是我不调用界面,也应该不需要消息循环呀!左右思考了很久实在没解决办法,还是借助qtwinmigrate写DLL,写的过程中也有很多其他问题。

问题1.无论如何也不能加载qtdialog.dll ,显示调用LoadLibraryA("qtdialog.dll");返回的一直为0, 工程目录下明明有该dll文件。

失败操作:查询的解决办法是---用Depends.exe查看该封装操作注册表dll的依赖项,然后将dll依赖项复制到工程目录下,即

 但是Depends.exe不给力呀,我弄好之后还是调用不了动态库,心态炸裂。

可行操作:

参考博客:(54条消息) 借助qtwinmigrate,实现外部程序调用带QT界面的DLL_HelloKandy的博客-CSDN博客

随后耐着性子看完了这篇文章,然后按照操作一步步来,然后用windeployqt拉取到了DLL的依赖项,以前只知道windeployqt 是打包发布.exe,没想到还能拉取DLL的依赖项,之后就解决了问题。

二、不借助qtwinmigrate写DLL(可被qt之外的其他程序调用)

本人思考了一下,既然借助qtwinmigrate建立事件循环的DLL也要拉取依赖项,才能够被加载,正常的未建立事件循环的QT的DLL是不是只要拉取依赖项也能够被qt之外的其他程序调用呢?

注意1:QT独有的头文件不能够放在DLL的.h文件中,必须放在.c中

 然后将修改后的DLL连同相关依赖项复制到工程目录下,运行成功。

得到结论:QT封装的动态库必须连同其相关的依赖项一起复制到工程目录下,才能够正常被win程序/MFC程序调用

瞬间感觉事情简单了,突然怀疑人生,我花了三天时间到底干了啥,不过反正是将复杂的操作简单化了很多。

本文仅分享一下思路,不说明具体的操作方式及步骤。遇到同样问题的小伙伴可以参考一下我的思路。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值