一、库的概念
源代码的二进制文件;
二、编译
分为动态编译与静态编译;
1)区别
(1)动态编译不便于发布,静态编译便于发布;
(2)动态编译生成的可执行文件体积较小,静态生成的可执行文件体积较大。
Windows中静态库后缀为.lib 动态库后缀为.dll
Linux中静态库后缀为.a 动态库后缀为.so
使用静态库后得到的可执行程序在执行时对这个库不再依赖。
使用动态库,便于升级与更新,接口保持不变,就可以通过更新DLL来升级程序,而不用重新 编译程序;
在不同的程序调用相同的库,则在内存里只需要有一份该共享库的实例;
三、静态库的封装与调用
1)使用VS创建静态库项目
2)创建头文件并导出需要的函数或类
(1)创建.h头文件(名称自定);
(2)导出方式确定,以C或C++方式;
(3)选中导出的函数名或类名 快捷键Alt + Enter ,在对应的同名源文件中创建对应函数或类的定义;
3)生成静态库文件
4)新建空项目
(1)将生成的name.lib与name.dll文件复制进新建空项目中;
(2)属性管理器中选择对应解决方案与平台,右击添加附加依赖项;
输入依赖库的名称
(2)在空项目中创建测试
使用program comment(lib,“name.lib”) 加载静态库
extern “C” _declspec(dllimport) 类型 函数名(); 导入C类型静态库
或 _declspec(dllimport) 类型 函数名();导入C++类型静态库
(3)编写函数或类,调用测试
(4)选择解决方案配置与平台,选择调试
四、动态库的封装(C/C++函数导出)
1)使用VS创建动态库项目
2)创建头文件并导出需要的函数或类
(1)创建.h头文件(名称自定);
(2)导出方式确定,以C或C++方式;
(3)选中导出的函数名或类名 Alt + Enter ,在对应的同名源文件中创建对应函数的定义;
3)生成动态库文件
五、动态库隐式调用(C/C++函数调用)
1)新建空项目
(1)新建一个空项目;
(2)将生成的name.lib、name.dll及xx.h文件复制进新建空项目所在的文件夹中;
(3)属性管理器中选择对应解决方案与平台,右击添加附加依赖项name.lib;
(4)右键头文件,添加现有项,将刚刚复制来的xx.h文件添加进入当前项目;
2)连接测试
(1)#include"xx.h"
(2)编写函数测试:
六、动态库显式调用(C/C++函数调用)
1)创建函数指针(类型要与.dll中的函数一致);
typedef int(*name)();
2)定义句柄,用于引用动态库;
HMODULE hdll;
引用动态库;
3)引入window头文件
#include;
4)加载动态库;
LoadLibrary(L"“);或LoadLibraryA(”");
5)调用函数;
auto dll = (name)GetProcAddress(hdll.“函数名”);
6)释放动态库句柄
步骤②中定义的句柄,FreeLibrary(句柄名称);文章来源地址https://www.toymoban.com/news/detail-459264.html
7)设置解决方案配置与平台,要与动态库一致,最后调试运行。
七、动态库封装(C/C++类导出)
1)创建动态库项目
(具体参考本篇文章第四部分的 1))
2)创建头文件并导出需要的类
类的导出,实际是将类中函数进行导出;
(1)创建.h头文件(名称自定);
(2)导出方式确定,以C或C++方式;
(3)选中导出的函数名或类名 Alt + Enter ,在对应的同名源文件中创建对应类中包含的函数的定义;
3)生成动态库文件
八、动态库隐式调用(C/C++类调用)
1)新建空项目
(具体参考本篇文章第五部分的 1))
2)连接测试
(1)#include"xx.h"
(2)写函数测试
九、动态库显式调用(C/C++类调用)
1)创建函数指针(类型要与.dll中的函数一致);
typedef int(*name)();
2)定义句柄,用于引用动态库;
HMODULE hdll;
引用动态库;
3)引入window头文件
#include;
4)加载动态库;
hdll = LoadLibrary(L".dll");或 hdll = LoadLibraryA(“.dll”);
5)调用函数;
auto dll = (name)GetProcAddress(hdll.“函数名”); 注意:在导出的动态库为C++类型时,应填写函数名对应的真实名称,因为C的为函数原名称,C++的则是加上一些符号,这是C++有类和重载的缘故。用depends查看对应的完整名称。文章来源:https://www.toymoban.com/news/detail-459264.html
6)释放动态库句柄
步骤②中定义的句柄,FreeLibrary(句柄名称);
“.dll”);
5)调用函数;
auto dll = (name)GetProcAddress(hdll.“函数名”); 注意:在导出的动态库为C++类型时,应填写函数名对应的真实名称,因为C的为函数原名称,C++的则是加上一些符号,这是C++有类和重载的缘故。用depends查看对应的完整名称。
6)释放动态库句柄
步骤②中定义的句柄,FreeLibrary(句柄名称);
7)设置解决方案配置与平台,要与动态库一致,最后调试运行。
到了这里,关于VS2019静态库与动态库入门操作指南的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!