如何在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进行调用
- 在VS上可以使用Win自带的函数
Qt调用方式:仅使用.dll和头文件 .h
- 注解:该方法仅能用于调用C函数,暂时没有发现如何调用面向对象的类或类成员函数,答案是不可以,参考文档2
-
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); }
-
编译输出,会生成
xxxx.lib
和xxxx.dll
,将xxxx.dll
拷贝到Qt项目目录 -
使用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