在VS和Qt中使用动态链接库.dll---以显式链接的方式

如何在Visual studio中创建C++的静态链接库(.lib文件)并使用,点击可查看
如何在Qt中使用静态库.lib(和VS一样,仅仅是操作方式略有差异)
如何在VS中创建.dll动态链接库、dll中函数与类的导出用__declspec(dllexport)
如何在Qt和VS中使用动态链接库.dll文件----以隐式链接的方式


在VS和Qt中使用动态链接库.dll(显式链接)

  • 如果不使用__declspec(dllexport),生成的动态库文件中只有.dll而没有.lib文件,这是错误的导出方式!
    • 作为动态库,在需要导出的类或函数前必须使用关键字__declspec(dllexport)声明,参考文档5
    • 静态库的定义不需要使用关键字__declspec(dllexport)声明
  • 而所谓的显式调用就是虽然生成了.lib文件但是不使用,通过函数加载.dll文件的方式进行调用
    • 在VS上可以使用Win自带的函数LoadLibrary()GetProcAddress()等进行调用
    • 在Qt中使用的是QLibrary类加载和解析dll进行调用
Qt调用方式:仅使用.dll头文件 .h
  • 注解:该方法仅能用于调用C函数,暂时没有发现如何调用面向对象的类或类成员函数,答案是不可以,参考文档2
  1. VS中封装dll,使用extern "C"__declspec(dllexport)

    #pragma once
    #ifdef _EXPORT
    #define MY_EXPORT  __declspec(dllexport)
    #else
    #define MY_EXPORT
    #endif // _EXPORT
    
    namespace DZCTEST {
    	extern "C" MY_EXPORT int add(int a, int b);
    	extern "C" MY_EXPORT int sub(int a, int b);
    }
    
  2. 编译输出,会生成xxxx.libxxxx.dllxxxx.dll拷贝到Qt项目目录

  3. 使用Qt自带的类QLibrary,加载并使用xxxx.dll

相关的参考文献:

1、https://www.cnblogs.com/houkai/archive/2013/06/05/3119513.html

2、https://blog.csdn.net/ixsea/article/details/6676802 (指出显式调用不支持类和变量)

3、https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-library-cpp?redirectedfrom=MSDN&view=msvc-170

4、https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-static-library-cpp?view=msvc-170

5、https://blog.csdn.net/huangyimo/article/details/81748939?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-81748939-blog-116257864.pc_relevant_multi_platform_whitelistv1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3-81748939-blog-116257864.pc_relevant_multi_platform_whitelistv1&utm_relevant_index=6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咖啡与乌龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值