1.静态库的创建与调用
创建Win32 Static Library工程
在工程中添加静态库的头文件(StaticLib.h)与实现文件(StaticLib.cpp)
如下图:
编译链接后,此时我们的静态库文件已经生成了
打开当前工程下Debug文件夹,会发现StaticLib.lib(静态库文件)
如其他人需要你的静态库时,你只需要将.h文件与.lib文件提供即可
接下来我们调用静态库
创建空的 Win32 Console Application 工程
//调用静态库的方法有多种,此处介绍一种常用&简单的方法
工程创建好后,首先将上述的.h与.lib文件拷贝到当前工程下(此时工程为调用静态库的工程)
//添加CallStaticLib.cpp调用静态库
结果如下:
2.动态库的创建与调用
使用动态库的时候,需要提供两个文件:引入库文件(.lib)和DLL(.dll)文件
创建空的 Win32 Dynamic~Link Liarary工程
添加DynamicLib.cpp 用来创建动态库//注意动态库一定要导出_declspec(dllexport)
编译链接在当前工程下查看Debug文件夹发现
为什么只有DLL文件而没有引入库文件??
那是因为我们没有导出那俩个函数,接下来介绍如何查看函数是否导出
查看导出:
没加_declspec(dllexport)
1.利用VC6自带工具Depends
2.用命令行输出
2.1 首先进入安装VC路径下的VC98的Bin目录(由于编者VC安装在C盘)
2.2 运行dumpbin命令
2.3 执行以下命令查看动态库
上述方法在动态库文件中没有发现我们的Mul与Dev函数.
现在修改一下DynamicLib.cpp内容,再次编译链接
同样用上述方法执行一遍发现:
加上_declspec(dllexport)后
1.VC自带工具Depends
2. 命令行(cmd)
这是说明我们的函数被导出了.
我们进入到当前工程的Debug目录下发现DLL文件与LIB文件
此时我们的动态库文件建立完成了,用户需要调用Mul与Dev时,我们提供DynamicLib.dll & DynamicLib.lib即可
接下来调用动态库(调用动态库的方法也有多种,此处介绍一种较常见 & 简单的方法)
创建空的Win32 Console Applicatuon工程
1. 将DynamicLib.dll & DynamicLib.lib拷贝到当前工程下
2. Project -> Settings 选择调用动态库的工程 -> Link -> 添加DynamicLib.lib
添加CallDynamicLib.cpp
运行结果如下:
到此为止静态库与动态库都使用了,但是动态库中还需要补充一点问题
_declspec(dllexport)与_declspec(dllimport)
如果上面仔细的朋友会发现 我用extern导入的Mul与Dev,其实用_declspec(dllimport)更好一点
主要区别在如果导出的是类的静态成员,尽量使用_declspec(dllimport)
那么我们就用这种方法实现一下吧
第一步:建立动态库工程,导出时就需要定义头文件Dll.h
第二步:实现Dll.cpp
第三步:拷贝Dll.h Dll.cpp Dll.lib(同样在Link中添加进去)
第四步:新建工程调用动态库
运行结果:
静态库:
编译链接可执行文件时,链接器从库中复制这些函数和数据到可执行文件中,发布产品时
只需要发布这个可执行文件,并不需要发布使用了的静态库
动态库:
编译链接可执行文件时,只需要链接该DLL的引入库文件,该DLL中的函数代码和数据并
不复制到可执行文件中,直到可执行文件运行时才去加载所需的DLL,将该DLL映射到进程的地址空间中,
然后访问DLL中导出的函数,在发布产品时,除了可执行程序以外,同时还要发布该程序将要调用的动态链接库。