动态链接库

你是否有过这样的经历?在配置不是很好的机器上运行一些不是很完善的Windows应用程序,系统速度越来越慢,直至弹出一个警告对话框:“系统资源严重不足!请关闭部分Windows应用程序......”。这往往是静态链接的缘故。使用普通的函数库,在程序链接时将库中的代码拷贝到可执行文件中,这叫作静态链接。假设有多个程序同时执行,这时内存中就会保留许多重复的代码副本。

使用动态链接库则不一样。只有程序在执行时才将库代码装入内存。对于同一个动态链接库,无论有多少个应用程序同时在使用它,内存中都只有一个动态链接库的副本。如果动态链接库不再被任何程序使用,系统就将它调出内存,这就减少了应用程序对内存的要求。

动态链接库是一种程序模块,它不仅可以包含可执行代码,而且通常还包含了各种类型的预定义的数据和资源,扩大了库文件的使用范围。Windows操作系统使用了许多动态链接库。比如我们使用Visual C++建立MFC应用程序时,如果在AppWizard向导中选择了使用MFC作为动态链接库,那么所有这种类型的程序至少都共用了“C:\Windows\System”目录下的MFC动态链接库文件Msvcrt.dll和Mfc42.dll。许多设备的驱动程序也是用动态链接库实现的,扩展名一般为.drv。

动态链接库技术常常用于开发大型软件系统。一个大型软件系统如果只通过一个可执行文件来完成,那程序就太庞大了,而且可能有许多重复的功能。这时如果将程序分解,由一系列主程序和动态链接库组成,这就减少了开发难度和工作量,提高了访问的速度,更有利于对整个系统的管理。

动态链接库的另一个用途是软件产品国际化。开发人员可以将依赖于各国语言的资源分离开来,各自放进专门的动态链接库中。各国不同的用户可以在安装和运行时,选择适当语言版本的动态链接库,这样主程序不用改变就可以用于全球范围。这是实现软件国际化的一项技术。

知道了动态链接库的这些特点,相信读者不难明白为什么动态链接库的应用那么广泛了。

时间: 2025-01-21 19:25:37

动态链接库的相关文章

Win7系统提示“无法定位动态链接库user32.dll”的解决方法

user32.dll是Windows用户界面相关应用程序接口,用于Windows处理,基本用户界面等特性,比如创建窗口和发送消息等,有用户反馈在win7系统上运行某软件的过程中,出现提示无法定位程序输入点dwmhintdxupdate于动态链接库user32.dll上,导致这个软件无法使用,下载重装也没用,不知该如何解决了?针对此问题,下面小编整理了解决方法,给大家介绍Win7纯净版64位系统运行软件提示无法定位动态链接库user32.dll的解决方法. 操作方法: 1.首先重新启动或注销win

VC++动态链接库(DLL)编程之库的调试与查看

  在具体进入各类DLL的详细阐述之前,有必要对库文件的调试与查看方法进行一下介绍,因为从下一节开始我们将面对大量的例子工程. 由于库文件不能单独执行,因而在按下F5(开始debug模式执行)或CTRL+F5(运行)执行时,其弹出如图3所示的对话框,要求用户输入可执行文件的路径来启动库函数的执行.这个时候我们输入要调用该库的EXE文件的路径就可以对库进行调试了,其调试技巧与一般应用工程的调试一样. 通常有比上述做法更好的调试途径,那就是将库工程和应用工程(调用库的工程)放置在同一VC工作区,只对

求助:调用包含并行计算的m文件编译成的动态链接库

问题描述 求助:调用包含并行计算的m文件编译成的动态链接库 请问如何在c++环境下调用包含并行计算(parfor)的MATLAB编译好的动态链接库(C++ shared library)?当m文件中不包含matlabpool open时,动态链接库是可以成功调用的,但是一旦m文件中包含matlabpool open,调用时会出现错误: "XXX exited with code -529697949" 求大神帮忙,如何调用含有并行计算的MATLAB动态链接库? 我的环境是:win7,Q

LoadRunner使用动态链接库技术

什么是动态库? 动态库一般又叫动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数.函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译.链接并与使用它们的进程分开存储的函数.DLL 还有助于共享数据和资源.多个应用程序可同时访问内存中单个DLL 副本的内容.DLL 是一个包含可由多个程序同时使用的代码和数据的库

什么是动态链接库(DLL)以及常见问题

动态|链接|问题 概要 本文说明什么是动态链接库 (DLL) 以及在使用 DLL 时可能发生的各种问题. 然后,本文说明在开发您自己的 DLL 时应该考虑的一些高级问题.在说明什么是 DLL 的过程中,本文将说明动态链接方法.DLL 依赖性.DLL 入口点.导出 DLL 函数以及 DLL 故障排除工具. 本文最后将从较高的层次对 DLL 与 Microsoft .NET Framework 程序集作一比较. 简介 对于"适用于"一节中列出的 Microsoft Windows 操作系统

如何在C#中加载自己编写的动态链接库(DLL)

动态|加载|链接 摘要 本文主要讲述如何在C#中逐步实现加载自己用C++语言编写的动态链接库,以及在导入时如何进行C#和C++语言的数据类型匹配 关键词 C# C++ 动态链接库 加载 数据类型匹配 一.发生的背景 在开发新项目中使用了新的语言开发C#和新的技术方案WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用C或C++或Delphi编写的,如何利用旧模块对于开发人员来说,有三种可用方法供选择:第一.将C或C++函数用C#彻底改写一遍,这样整个项目代码比较统一,维护

抽取VS文件组成类GCC的编译器并编译C程序为dll动态链接库

用惯了linux下的GCC编译工具,倒喜欢起命令行的方式编译链接C程序,居然还发现我装的VS工具没看到直接编译C程序的工具(我不太熟悉这个).VS的编译文件命令是cl,链接命令是link.参考了网上资料,采用提取VS的编译器文件组成一个可以命令行方式编译程序的工具.以下为步骤: 1,在自己目录创建文件夹,如:D:/vctool; 2,将VS安装目录下的VC目录下的bin.lib.include目录考到vctool目录下: 3,将c:/Program Files/Microsoft SDKs/Wi

Linux下C编程:关于动态链接库

在上篇文章中,是对静态链接库的介绍,其实有了上面的介绍动态链接库的制作就简单了,这篇来制作动态链接库~~~ 创建动态链接库: #gcc –shared –Wall –fPIC bar.o foo.o –olibfoobar.so 或手动指定库路径 $ gcc -o foobar main.c-llt -B /path/to/lib 这里的-B 选项就添加 /path/to/lib 到gcc搜索的路径之中.这样链接没有问题但是方法II中手动链接好的程序在执行时候仍旧需要指定库路径(链接和执行是分开

Windows & Eclipse & CDT & MinGW 创建动态链接库(dll)

Eclipse CDT + MinGW 创建动态链接库(dll). 1. 创建动态链接库的工程 选择: Shared Library: Empty Project  -> MinGW GCC 2. 创建导出函数 /* * say.cpp * * Created on: 2014年4月16日 * Author: Spike */ #include <iostream> #include <string> void say(std::string _name) { std::co

Windows编程:遍历程序使用的动态链接库(dll) 代码(C++)

遍历程序使用的动态链接库(dll), 首先需要遍历所有进程, 匹配进程名称与进程ID, 然后根据进程名称, 输出所有使用的库(dll). 示例中Image.exe是预先启动的程序. 代码包含遍历进程的代码, 和输出动态链接库(dll)的代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <iomanip> #inclu