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

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。

猜你喜欢

转载自blog.csdn.net/yanchenyu365/article/details/131073280
今日推荐