Qt6之vc调用Qt生成无ui的dll

文章介绍了如何在Qt环境中生成DLL供VC或其他语言调用,以及VC如何调用Qt生成的DLL。在生成DLL时,由于C++的名称修饰问题,函数名会发生变化,通常使用externC解决,但限制了类成员函数的导出。文章讨论了不使用externC且包含类成员函数的情况,并提供了VC调用QtDLL的步骤。
摘要由CSDN通过智能技术生成

Qt可以调用vc生成的dll,反之qt也可以提供生成的dll给其它语言来调用,比如VC、rust等。

一、qt生成dll

在Qt creator加持下已经很容易的生成DLL,如下:

1、新建,库,C++ Library;

 2、类型,选择 Shared Library,qt module选择无,否则纯VC项目必须导入qt库; 

 3、第10行,声明并定义函数add(),最后按ctr b生成(注意这里不是ctrl r运行,是生成,也就是qt所说的“构建”,同时注意默认为debug,左下角切换输出为Release),最后会在Release目录下看到tell.dll和test.lib

 4、导出函数名查看

此时为了确保dll无误,使用来查看dependency walker,打开test.dll,查看函数名(win11可能无响应,请复制test.dll和工具,去win10及一下试试),结果居然是

?add@Test@@QEAAHHH@Z难道不应是add

出现这种情况,你知道在vc中是无法调用成功的,因为函数名在编译时已经发生变化。原因是:C++编译器因为不统一的原因在生成dll时会对导出函数根据编译器进行名字改编,这也就导致原来add变成了 ?add@Test@@QEAAHHH@Z

此时其实大家最常用的方案是利用限定符extern “C”,但是这也意味着类的成员函数无法使用,只能导出全局函数,当然你要觉得dll不想用类的成员函数,那不会有问题直接使用即可。

本文讨论是不使用extern “C”且有类成员函数的情况:

 二、vc调用Qt生成的dll

1、新建控制台项目,并将项目切到Release x64,将dll项目的.lib和.h复制到vs项目目录下,分别添加到头文件和资源文件;

 2、将dll复制到vs生成的exe所在目录下;

 

 3、直接包含头文件,将类实例化,调用函数即可;

 4、将exe和dll复制到没有编译器的环境中测试,也正常如下:

备注:如果一开始建的dll库包含了qt模块,那么后续调用建议用qt creator创建qt widgets项目再去调用dll。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闫有尽意无琼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值