`
jianchen
  • 浏览: 336283 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

动态链接库

阅读更多

<!---->            

一、动态链接库的概念   

       动态链接库(Dynamic Link Library ,缩写为DLL )是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是dll ,也有可能是drv 、sys 和fon ,它和可执行文件(exe )非常类似,区别在于DLL 中虽然包含了可执行代码却不能单独执行,而应由Windows 应用程序直接或间接调用。  动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的exe 文件中, 该文件包含了运行时所需的全部代码 。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。 而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息) 。仅当应用程序被装入内存开始运行时,在Windows 的管理下,才在应用程序与相应的DLL 之间建立链接关系。 当要执行所调用DLL 中的函数时,根据链接产生的重定位信息,Windows 才转去执行DLL 中相应的函数代码。 一般情况下,如果一个应用程序使用了动态链接库, Win32 系统保证内存中只有DLL 的一份复制品 , 这是通过内存映射文件实现的 。DLL 首先被调入Win32 系统的 全局堆栈 , 然后映射到调用这个DLL 的进程地址空间 。在Win32 系统中,每个进程拥有自己的32 位线性地址空间,如果一个DLL 被多个进程调用,每个进程都会收到该DLL 的一份映像。与16 位Windows 不同,在Win32 中DLL 可以看作是每个进程自己的代码。 ·

二、动态链接库的优点

      1 . 共享代码、资源和数据 使用DLL 的主要目的就是为了共享代码,DLL 的代码可以被所有的   Windows 应用程序共享。 2 . 隐藏实现的细节    DLL 中的例程可以被应用程序访问,而应用程序并不知道这些例程的细节。  3 . 拓展开发工具如Delphi 的功能   由于DLL 是与语言无关的,因此可以创建一个DLL ,被C++ 、VB 或任何支持动态链接库的语言调用。 这样如果一种语言存在不足,就可以通过访问另一种语言创建的DLL 来弥补 。  

三、动态链接库的实现方法   

     1 . Load-time Dynamic Linking   这种用法的前提是在编译之前已经明确知道要调用DLL 中的哪几个函数 ,编译时在目标文件中只保留必要的链接信息 ,而不含DLL 函数的代码 ;当程序执行时,利用链接信息加载DLL 函数代码并在内存中将其链接入调用程序的执行空间中,其主要目的是便于代码共享。   2 . Run-time Dynamic Linking   这种方式是指在编译之前并不知道将会调用哪些DLL 函数,完全是在运行过程中根据需要决定应调用哪个函数, 并用LoadLibrary 和GetProcAddress 动态获得DLL 函数的入口地址。

· 四.认识动态链接库DLL 文件   

       DLL 是Dynamic Link Library 的缩写,意为动态链接库。在Windows 中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL 文件,放置于系统中。当我们执行某一个程序时,相应的DLL 文件就会被调用。一个应用程序可有多个DLL 文件,一个DLL 文件也可能被几个应用程序所共用,这样的DLL 文件被称为共享DLL 文件。DLL 文件一般被存放在C:WindowsSystem 目录下。   1 、了解某应用程序使用哪些DLL 文件   右键单击该应用程序并选择快捷菜单中的“快速查看”命令,在随后出现的“快速查看”窗口的“引入表”一栏中你将看到其使用DLL 文件的情况。 2 、知道DLL 文件被几个程序使用 运行Regedit ,进入HKEY_LOCAL_MACHINE\Software\Microsrft\Windows\Current- Version\SharedDlls 子键查看,其右边窗口中就显示了所有DLL 文件及其相关数据,其中数据右边小括号内的数字就说明了被几个程序使用,(2 )表示被两个程序使用,(0 )则表示无程序使用,可以将其删除。   3 、如何解决DLL 文件丢失的情况   有时在卸载文件时会提醒你删除某个DLL 文件可能会影响其他应用程序的运行。所以当你卸载软件时,就有可能误删共享的DLL 文件。一旦出现了丢失DLL 文件的情况,如果你能确定其名称,可以在Sysbckup (系统备份文件夹)中找到该DLL 文件,将其复制到System 文件夹中。如果这样不行,在电脑启动时又总是出现“***dll 文件丢失……”的提示框,你可以在“开始/ 运行”中运行Msconfig ,进入系统配置实用程序对话框以后,单击选择“System.ini ”标签,找出提示丢失的DLL 文件,使其不被选中,这样开机时就不会出现错误提示了。 · 五.系统中几个重要的动态链接库:  Windows 中有3 个非常重要的底层DLL:Kernel32.dll 、User32.dll 、GDI32.dll 。其中Kernel32.dll 顾名思义就是内核相关的功能,主要包含用于管理内存、进程和线程的函数; 而User32.dll 中包含的则是用于执行用户界面任务的函数,比如把用户的鼠标点击操作传递给窗口,以便窗口根据用户的点击来执行预定的事件;GDI32.dll 的名称用了缩写,全称是Graphical Device Interface( 图形设备接口) ,包含用于画图和显示文本的函数,比如要显示一个程序窗口,就调用了其中的函数来画这个窗口。 六.动态链接库的创建: (1 )LoadLibrary 函数 (2 )GetProcAddress 函数 (3 )FreeLibrary 

分享到:
评论

相关推荐

    系统程序设计:动态链接库程序设计

    1.创建一个动态链接库,在该动态链接库中添加一个函数,该函数可以输出如图所示的图形; 2.在上面创建的动态链接库中添加导出类,并把绘制图形的函数添加到该类下; 3.创建一个动态链接库,在该动态链接库中添加一个...

    动态链接库实验报告.pdf

    动态链接库实验报告

    动态链接库的例子

    动态链接库的例子,用于DLL的静态调用,可以帮助了解动态链接库的使用

    C# dll的调用(动态链接库创建与使用)

    C#dll的调用 dll源代码 动态链接库 dll动态链接 C#动态链接库

    windows动态链接库.rar

    Dynamic Link Library,即动态链接库,是Microsoft在Windows操作系统中实现共享函数库概念的一种实现方式,这种库包含了可由多个程序同时使用的代码和数据 它其中windows中 一些作为DLL实现的文件有:ActiveX控件(....

    动态链接库(DLL)编程深入浅出

    1.概述  先来阐述一下DLL(Dynamic Linkable Library)的概念...静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

    VC++写动态链接库教程

    先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以...静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

    C++动态链接库编程深入浅出

    C++动态链接库编程深入浅出,动态链接库的建立与调用。

    动态链接库的建立与调用

    显式调用法调用动态链接,隐式调用动态链接 掌握动态链接库建立和调用方法。在WindowsXP+Microsoft Visual C++环境下建立一个动态链接库,并分别使用隐式和显式方式将其调用,从而体会使用动态链接库的优点。

    静态、动态链接库的创建和调用

    详细介绍了静态链接库和动态链接库的创建和调用方法,其中动态链接库又分为加载时动态链接和运行时动态链接两种。附有程序进行说明~~

    使用VC++进行动态链接库的设计

    进程之间的共享可由:1)创建动态链接库实现;2)通过内存映像文件来实现,内存映像文件就是在内存中开辟一个类似文件的区域,即通过函数CreateFileMapping()。使用信号量可以实现两个进程之间的互斥访问共享内存...

    我的动态链接库文件dll.rar

    我的动态链接库文件,可以用所学的内容编写一个动态链接库的文件,动态链接库的制作与调用,题目:创建一个动态链接库,实现画一棵树。 1).启动Visual C++6.0或者C++ Builder 5.0 .在WINDOWS98或WINDOWS 2000...

    如何制作动态链接库,动态链接库的制作。

    介绍如何制作动态链接库 动态链接库的优点 制作过程 调用方法等。

    GmSSL动态链接库

    Windows10编译出来的GmSSL动态链接库,可以在windows系统中通过java调用。编译过程可以参考 https://blog.csdn.net/liuxing9345/article/details/110742166

    动态链接库运算器

    在应用程序中用 LoadLibrary或MFC提供的AfxLoadLibrary显式的将自己所做的动态链接库调进来,动态链接库的文件名即是上述两个函数的参数,此后再用GetProcAddress()获取想要引入的函数。自此,你就可以象使用如同在...

    VC++动态链接库(dll)编程深入浅出-----PDF和源码

    静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。  对动态链接库,我们还需建立如下概念:  (1)DLL 的...

    RSA加密动态链接库Cryptopp32_DLL_Project

    如果你还在找cryto++的动态链接库你可以到官方网站去下载,里面有动态链接库版本,但是不太适合我们的项目,而且里面的示例没有如何把公钥放在一个string内的方法, 而这个项目就有! 具体请看代码吧,但是说明一点,这个原...

    利用simulink生成动态链接库

    利用simulink生成动态链接库供VS2015,Qt5.9.2成功调用。

    动态链接库大总结.rar动态链接库大总结.rar

    动态链接库大总结.rar动态链接库大总结.rar动态链接库大总结.rar

Global site tag (gtag.js) - Google Analytics