`
javababy1
  • 浏览: 1225567 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

什么是 DLL?

阅读更多
动态链接库 (DLL) 是包含函数和数据的模块的集合。程序文件(如 .exe 文件或 .dll 文件)在运行时加载这些模块(亦即所需的模块映射到调用进程的地址空间)。下面两类函数定义了 DLL: • 导出函数:这些函数由其他模块调用。
• 内部函数:这些函数仅从定义它们的 DLL 中调用。
DLL 还导出数据。不过,这些数据由相应的函数使用。
动态链接和静态链接
动态链接包括系统在加载或运行时查找导出的 DLL 函数的代码所需的信息。

在静态链接中,链接器将库函数的代码复制到调用 DLL 的每个模块。

可以通过下列方式调用 DLL 中的函数: • 加载时动态链接:调用方模块执行显式调用以导出 DLL 函数。为 DLL 创建导入库,然后将 DLL 链接到应用程序。在加载应用程序时,导入库提供加载 DLL 和查找导出的 DLL 函数所需的信息。
• 运行时动态链接:在运行时加载 DLL 时,调用方模块使用 LoadLibrary 函数或 LoadLibraryEx 函数。调用方模块调用 GetProcAddress 函数以获取导出的 DLL 函数的地址。
在链接时,Windows 搜索预安装的一组 DLL,例如性能库 (Kernel32.dll) 和安全库 (User32.dll)。然后,Windows 按以下顺序搜索 DLL: 1. 当前进程的可执行程序所在的目录。
2. 当前目录。
3. Windows 系统目录。(GetSystemDirectory 函数获取 Windows 系统目录的路径。)
4. Windows 目录。(GetWindowsDirectory 函数获取 Windows 目录的路径。)
5. PATH 环境变量中列出的目录。

注意:LIBPATH 环境变量不用于搜索。

DLL 和静态库
• DLL 可节省内存并减少交换。 通过在内存中共享 DLL 的单个副本,多个进程可以同时使用一个 DLL。相比之下,对于使用静态链接库构建的每一个应用程序,Windows 都要在内存中为其加载库代码的一个副本。
• DLL 可节省磁盘空间。 多个应用程序可以共享磁盘上的一个 DLL 副本。相比之下,使用静态链接库构建的每一个应用程序都需要让链接到程序文件映像的库代码作为一个单独的专用副本。
• DLL 可节省时间。 更改 DLL 中的函数时,只要函数的参数和返回值不变,就不必重新编译或重新链接使用这些函数的应用程序。但是,如果您使用静态链接的对象代码,则在更改函数后必须重新链接应用程序。

DLL 可以共享函数。 在 Win32 中,DLL 可以共享函数。默认情况下,数据对于每个进程来说是独立的。但是,静态库包含针对每一个进程的单独的数据副本和函数。

DLL 入口点
DLL 有一个特殊的入口点(DllMain 函数),它在附加和分离进程和线程时运行。此行为允许根据需要创建和销毁数据结构。文件扩展名为 .ocx、.cpl 和 .drv 的文件类型也是 DLL,尽管文件扩展名已改变。在 Windows 2.x 和 Windows 3.x 中,每个 DLL 都只有一个数据段实例,而不管有多少应用程序。在 Windows 32 中,可以将 DLL 标记为共享以导致相同的行为。但是,每个进程的默认设置是拥有 DLL 数据的专用副本。
您可以通过创建 DLL 实现以下目的: • 将程序划分为可按需加载的单独模块。
• 存储特定于语言或特定于区域的资源。
• 使您自己的应用程序能够使用核心代码库。
• 生成进程内 COM 对象或 ActiveX 控件 (OCX)。
• 将 OLE 对象用作进程内 DLL。这一用法可改进 OLE 链接的性能。
• 使用控制面板扩展或使用某些类型的驱动程序。
要生成 DLL,请使用 DllMain 函数(而不是程序文件)替换 WinMain 函数。

要在 Win16 中导出函数,请将 FAR EXPORT 添加到所有导出的 DLL 函数(在 Win32 中不要求这样做)。许多 32 位编译器提供了函数声明符,例如 __declspec(dllexport) 和 __declspec(dllimport)。这些函数声明符出现在函数声明之前以代替调用。不过,定义必须仅指定 dllexport 属性。

分享到:
评论

相关推荐

    DLL知识.doc--什么是 DLL?

    动态链接库(DLL)是Windows操作系统中的一种核心机制,它允许多个程序共享同一段代码和数据,从而提高资源利用率和程序性能。DLL文件通常包含了可重用的函数库,如系统函数、用户界面元素或者特定服务。这样,当多...

    14.如何显式链接DLL?(Visual C++编程 源代码)

    14.如何显式链接DLL?(Visual C++编程 源代码)14.如何显式链接DLL?(Visual C++编程 源代码)14.如何显式链接DLL?(Visual C++编程 源代码)14.如何显式链接DLL?(Visual C++编程 源代码)14.如何显式链接DLL?...

    请问有哪位大神能破解这个DLL?

    请问有哪位大神能破解这个DLL?

    dxgi.dll是什么?放在哪?dxgi.dll修复方法.docx

    DXGI.DLL 是什么? ---------------- DXGI.DLL 是一个动态链接库(DLL)文件,由 Microsoft Corporation 开发,属于 DirectX Graphics Infrastructure(DXGI)的一部分。DXGI.DLL 负责提供图形处理和游戏相关的功能...

    dll是什么文件?.docx

    一、什么是 dll 文件? dll 文件是 Dynamic Link Library 的缩写,意为动态链接库。它是一个包含可由多个程序同时使用的代码和数据的库。dll 文件对于电脑运行很重要,万一缺了某个 dll 文件,可能会导致某些软件或...

    运行时缺少MSVCP60D.DLL?

    测试程序时有没有遇到找不到MSVCP60D.DLL的情况?

    Dependency Walker2.2

    1.什么是DLL? 在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一...

    VB 报表dll

    报表DLL,引用格式,直接调用,VB中引用此DLL

    deskadp.dll deskmon.dll deskperf.dll

    标题中的"deskadp.dll", "deskmon.dll", 和 "deskperf.dll" 是Windows操作系统中的动态链接库(DLL)文件,它们在系统中扮演着重要的角色。DLL文件是Windows操作系统中的一种共享库,包含了实现特定功能的代码和数据...

    Fp4autl.dll,Fpencode.dll,Fp4awel.dll

    标题中的"Fp4autl.dll"、"Fpencode.dll"和"Fp4awel.dll"是Microsoft Office 2007安装过程中涉及的动态链接库(DLL)文件,它们在系统中扮演着重要的角色。DLL文件是Windows操作系统中的一种共享库,用于存储程序执行...

    WinCC调用自定义DLL.rar

    首先,我们来理解什么是DLL。DLL(Dynamic Link Library)是Windows操作系统中的一种共享库机制,它允许多个程序同时使用同一段代码,节省内存并提高执行效率。在WinCC中调用自定义DLL,意味着我们可以将特定的控制...

    pbvm90.dll

    pbvm90.dll文件是什么? pbvm90.dll是POWERHOME、SYBASE数据库等所必须的DLL文件,用于支持Direct Sound声音特性。(DLL是什么文件?动态链接库)。 如何安装和卸载pbvm90.dll文件? 1,解压所下载的文件; 2,拷贝该DLL...

    MT4平台dll编程手册

    **MT4平台DLL编程手册** MT4(MetaTrader 4)是全球交易者广泛使用的外汇、期货和差价合约交易平台,其内置的MQL4语言允许开发者创建自定义指标、专家顾问(EA)以及脚本。DLL(动态链接库)编程在MT4中扮演着重要...

    CCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHM

    CCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime.dll和CCHMITags.dllCCHMIRuntime....

    Qt 编程 DLL和DLL的3中常见调用方法

    DLL_CALL1: 调用dll里的全局函数,使用QLibrary,它封装了loadlibrary和getprocaddress,等 freelibrary 要求: 需要知道dll里函数的原型,来写函数指针。 dll放到一个指定的目录下不一定非exe旁边。 DLL_CALL2:...

    VC编写dll入门,适合刚学习dll的朋友看

    ### VC编写DLL入门详解 #### 一、概述 动态链接库(Dynamic Link Library,简称DLL)是一种可被多个程序同时使用的文件,它提供了一种有效的方法来共享代码和资源。DLL 文件包含可供程序调用的功能,如绘图例程、...

    iis 常用dll文件

    zonelibm.dll zoneclim.dll znetm.dll zeeverm.dll zcorem.dll wamreg51.dll wam51.dll w3svc.dll w3svapi.dll w3ctrs51.dll w3ctrs.dll uniansi.dll tools.dll svcext51.dll sspifilt.dll ssinc51.dll shvlres.dll ...

    多个DLL合并成一个DLL

    ILMerge 这个工具能把多个DLL合并成一个DLL。 开发打包方便多了。 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 多个DLL合并成一个DLL,把DLL合并到Exe中的解决方案 开始-》运行 -》 "cmd" -> "cd C:\...

    精简版icudt51.dll icudt52.dll icudt53.dll icudt54.dll icudt55.dll

    本文将针对标题提及的"icudt51.dll、icudt52.dll、icudt53.dll、icudt54.dll、icudt55.dll"这五款精简版的DLL文件进行详尽的阐述。 首先,icudt.dll是Unicode数据和转换库的缩写,它是国际化的关键组件,主要负责...

    oci.dll、oraocci11.dll、oraociei11.dll3个资源文件

    oci.dll、oraocci11.dll 和 oraociei11.dll 是与 Oracle 数据库相关的动态链接库(DLL)文件。 oci.dll:是 Oracle Call Interface (OCI) 的动态链接库文件。 oraocci11.dll:这个 DLL 文件与 oci.dll 类似,也是...

Global site tag (gtag.js) - Google Analytics