动态链接库

>>静态库:函数和数据被编译进一个二进制文件(扩展名通常为.lib),在使用静态库的情况下,在编译链接可执行文件时,链接器从静态库中复制这些函数和数据,并把它们和应用程序的其他模块组合起来创建最终的可执行文件(.exe)。当发布产品时,只需要发布这个可执行文件,并不需要发布被使用的静态库。这种lib中有函数的实现代码,一般用在静态链接上,它是将lib中的代码加入目标模块(exe或者dll)文件中,所以链接好了之后,lib文件就没有用了。
>>动态库:在使用动态库时,往往提供两个文件:一个引入库(.lib,非必须)和一个.dll文件。这里的引入库和静态库文件虽然扩展名都是.lib,但是有着本质上的区别,对于一个动态链接库来说,其引入库文件包含该动态库导出的函数和变量的符号名,而.dll文件包含该动态库实际的函数和数据。dll是一些独立的文件,其中包含能被可执行程序或其他dll调用来完成某项工作的函数,只有在其他模块调用dll中的函数时,dll才发挥作用。

1.优点

(1)可以使用多种编程语言编写:比如我们可以用VC++编写dll,然后在VB编写的程序中调用它。

(2)增强产品功能:可以通过开发新的dll取代产品原有的dll,达到增强产品性能的目的。

(3)提供二次开发的平台:用户可以单独利用dll调用其中实现的功能,来完成其他应用,实现二次开发。

(4)节省内存:如果多个应用程序使用同一个dll,该dll的页面只需要存入内存一次,所有的应用程序都可以共享它的页面,从而节省内存。

2.创建方法

【创建一个新的Win32 Project,在Application Type中选择DLL,在Additional options中选择Empty project,即创建一个空的动态链接库工程;然后填充函数Build即可。】

(1)使用 __declspec(dllexport) 创建dll

应用程序如果想要访问某个dll中的函数,那么这个函数必须是已经被导出的函数

>>查看被导出的函数:

第一步:进入到VS的安装目录下,运行一个名为VCVARS32.bat的批处理程序

第二步:进入到VS的安装目录下,命令行输入 dumpbin -exports test.dll

>>想要导出函数名字不被篡改,前缀添加:extern “C”__declspec(dllexport) int f(){}

(2)使用模块定义(.def)文件创建dll

3.使用方法

(1)将文件***.lib、***.dll文件复制到工程目录下的Debug目录下。(内置文件位置相对地址为:“..\\Debug\\”)

(2)在项目中使用文件头部添加:

    #pragma comment(lib,"..\\Debug\\***.lib")
    __declspec(dllimport) void startf();

(3)在使用位置处调用函数startf:

    startf();

>>运行时库:运行时库(Runtime library)通俗的说就是我们的程序运行的时候所依赖的库文件,在Windows平台这些库由微软提供,并且是以2种形式提供:静态库(lib)、动态库(lib+dll)。每个库还都提供debug、release 2个版本。C/C++运行时库从形式上来讲和我们自己开发的静态库、动态库没什么两样,只是它们由微软开发和维护,并提供了一些常用的功能支持(如malloc,free, printf等等),如果我们的程序需要使用这些功能(事实上,只要是C/C++程序就一定会用到运行时库提供的功能),就要链接C/C++运行时库。我们可以自主选择是链接“静态库”还是“动态库”,是链接“debug版本”的还是“release版本”的。

     1.MT选项:链接LIB版的C和C++运行库。在链接时就会在将C和C++运行时库集成到程序中成为程序中的代码,程序体积会变大。 
     2.MTd选项:LIB的debug版。 
     3.MD选项:使用DLL版的C和C++运行库,这样在程序运行时会动态的加载对应的DLL,程序体积会减小,缺点是在系统没有对应DLL时程序无法运行。 
     4.MDd选项:表示使用DLL的debug版。

VC6.使用的CRT库的DLL版本在MSVCRT.DLL中实现, 对应调试版本为MSVCRTD.LIB。 


VC2005使用的CRT库的DLL版本在MSVCR80.DLL中实现,对应调试版本为MSVCR80.DLL。 

下载地址:
Microsoft Visual C++ 2005 Redistributable Package (x86)
https://www.microsoft.com/zh-cn/download/details.aspx?id=3387
Microsoft Visual C++ 2005 Redistributable Package (x64)
https://www.microsoft.com/zh-cn/download/details.aspx?id=21254


VC2008使用的CRT库的DLL版本在MSVCR90.DLL中实现,对应调试版本为MSVCR90D.DLL。 

下载地址:
Microsoft Visual C++ 2008 Redistributable Package (x86)
https://www.microsoft.com/zh-cn/download/details.aspx?id=29
Microsoft Visual C++ 2008 Redistributable Package (x64)
https://www.microsoft.com/zh-cn/download/details.aspx?id=15336


VC2010使用的CRT库的DLL版本在MSVCR100.DLL中实现,对应调试版本为MSVCR100D.DLL。 

下载地址:
Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)
https://www.microsoft.com/zh-cn/download/details.aspx?id=8328
Microsoft Visual C++ 2010 SP1 Redistributable Package (x64)
https://www.microsoft.com/zh-cn/download/details.aspx?id=13523


VC2013使用的CRT库的DLL版本在MSVCR120.DLL中实现,对应调试版本为MSVCR120D.DLL。

下载地址:
Visual C++ Redistributable Packages for Visual Studio 2013
https://www.microsoft.com/zh-cn/download/details.aspx?id=40784

其他版本下载地址:
Microsoft Visual C++ 2015 Redistributable Update 3
https://www.microsoft.com/zh-cn/download/details.aspx?id=53587
Microsoft Visual C++ 2017 X64
https://go.microsoft.com/fwlink/?LinkId=746572
Microsoft Visual C++ 2017 x86
https://go.microsoft.com/fwlink/?LinkId=746571

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值