Windows用来定位DLL的搜索路径个人经验总结
发布时间:2014-04-16 15:54:26 作者:佚名
我要评论
这篇文章主要介绍了Windows用来定位DLL的搜索路径,有不明白的朋友可以参考下
《程序员面试宝典》一书中写到,windows搜索dll文件的顺序为:(1)内存(2)knowndlls(3)清单与.local(4)应用程序目录(5)当前工作目录(6)系统目录(7)路径变量
总觉得不太明白,遂查资料确认一下。
查msdn如下:http://msdn.microsoft.com/zh-cn/library/7d83bc18.aspx
通过隐式和显式链接,Windows 首先搜索“已知 DLL”,如 Kernel32.dll 和 User32.dll。Windows 然后按下列顺序搜索 DLL:
当前进程的可执行模块所在的目录。
当前目录。
Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。
Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
PATH 环境变量中列出的目录。
隐式链接有时称为静态加载或加载时动态链接。显式链接有时称为动态加载或运行时动态链接。
在隐式链接下,使用 DLL 的可执行文件链接到该 DLL 的创建者所提供的导入库(.lib 文件)。使用 DLL 的可执行文件加载时,操作系统加载此 DLL。客户端可执行文件调用 DLL 的导出函数,就好像这些函数包含在可执行文件内一样。
在显式链接下,使用 DLL 的可执行文件必须进行函数调用以显式加载和卸载该 DLL,并访问该 DLL 的导出函数。客户端可执行文件必须通过函数指针调用导出函数。
“已知的 DLL”(非正式名称)的功能指由内核的模块加载器进行特殊处理的 DLL(动态链接库)列表。当加载器发现具有指向已知的 DLL 的加载时动态链接的程序时,就会立即使用已知的副本,而忽略通常情况下应用于模块加载的搜索算法。
那上面所写的内存是什么道理呢?搜索动态库首先是内存,如果内存中存在就不需要加载,否则需要搜索到后加载到内存中。dll的主要优点也是节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。
感觉.local文件像是配置之类的,没查到相关资料,不清楚。
当前工作目录 (Current Working Directory), 一般来说,每个进程都有一个与之相关联的分级文件系统(hierarchical file system)下的目录,称之为该进程的当前工作目录。如果程序刚进入main入口处的时候,当前工作目录其实就是程序启动的目录,但是当前工作目录是可以通过程序进行设置或者随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。
应用程序所在的目录, 该进程从中启动的目录,即程序文件自身所在的目录。和当前工作目录是不同的。
总觉得不太明白,遂查资料确认一下。
查msdn如下:http://msdn.microsoft.com/zh-cn/library/7d83bc18.aspx
通过隐式和显式链接,Windows 首先搜索“已知 DLL”,如 Kernel32.dll 和 User32.dll。Windows 然后按下列顺序搜索 DLL:
当前进程的可执行模块所在的目录。
当前目录。
Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。
Windows 目录。GetWindowsDirectory 函数检索此目录的路径。
PATH 环境变量中列出的目录。
隐式链接有时称为静态加载或加载时动态链接。显式链接有时称为动态加载或运行时动态链接。
在隐式链接下,使用 DLL 的可执行文件链接到该 DLL 的创建者所提供的导入库(.lib 文件)。使用 DLL 的可执行文件加载时,操作系统加载此 DLL。客户端可执行文件调用 DLL 的导出函数,就好像这些函数包含在可执行文件内一样。
在显式链接下,使用 DLL 的可执行文件必须进行函数调用以显式加载和卸载该 DLL,并访问该 DLL 的导出函数。客户端可执行文件必须通过函数指针调用导出函数。
“已知的 DLL”(非正式名称)的功能指由内核的模块加载器进行特殊处理的 DLL(动态链接库)列表。当加载器发现具有指向已知的 DLL 的加载时动态链接的程序时,就会立即使用已知的副本,而忽略通常情况下应用于模块加载的搜索算法。
那上面所写的内存是什么道理呢?搜索动态库首先是内存,如果内存中存在就不需要加载,否则需要搜索到后加载到内存中。dll的主要优点也是节省内存和减少交换操作。很多进程可以同时使用一个 DLL,在内存中共享该 DLL 的一个副本。相反,对于每个用静态链接库生成的应用程序,Windows 必须在内存中加载库代码的一个副本。
感觉.local文件像是配置之类的,没查到相关资料,不清楚。
当前工作目录 (Current Working Directory), 一般来说,每个进程都有一个与之相关联的分级文件系统(hierarchical file system)下的目录,称之为该进程的当前工作目录。如果程序刚进入main入口处的时候,当前工作目录其实就是程序启动的目录,但是当前工作目录是可以通过程序进行设置或者随着OpenFileDialog、SaveFileDialog等对象所确定的目录而改变。
应用程序所在的目录, 该进程从中启动的目录,即程序文件自身所在的目录。和当前工作目录是不同的。
相关文章
Windows 11系统里的广告越来越多,弹窗、推荐、提示层出不穷,简直让人抓狂!别急,今天我为大家带来一份超详细的教程,手把手教你如何关闭这些烦人的广告,让你的Win11清2026-04-18
电脑打印机状态错误怎么解决? 快速搞定Windows打印机状态错误的方法
当我们急需打印文件时,电脑右下角弹出的“打印机处于错误状态”或“无法打印”的提示,无疑会让人感到困扰和焦虑,这种“错误状态”看似复杂,但实际上多数问题并非源于硬2026-04-18
电脑网络受限怎么办? Windows提示网络连接受限的解决办法
昨晚加班到一半,突然发现右下角的网络图标多了个黄色叹号,提示“本地连接受限制”,下面我们就来看看解决办法2026-04-18
轻松保护你的电脑隐私! Windows系统如何设置动态锁功能
如果您希望在离开电脑时无需手动操作即可自动锁屏,Windows动态锁功能可通过蓝牙检测手机距离实现该效果,以下是设置此功能的具体步骤2026-04-17
保护电脑数据安全! Windows系统快速关闭磁盘默认共享方法
你可能还不知道,系统默认还开启了硬盘分区(如C盘、D盘)的共享功能,今天我们就来看看一键关闭Windows默认共享,保护电脑数据安全的设置方法2026-04-17
Windows预览窗口大小怎么自由调节? 电脑任务栏预览窗口设置方法
对于Windows系统的深度用户来说,文件预览功能无疑是日常操作中的得力助手,然而,系统默认的预览窗口大小可能并不完全符合每个人的使用习惯,今天,我就为大家带来一个技术2026-04-17
windows无法更改设置怎么办? 电脑不允许修改系统设置无问题的解决办法
想要调整一下系统设置,却发现无论你怎么点来点去,它就是不给你改!这可真是让人欲哭无泪啊!别担心,今天我就来给大家分享一些解决方法,让你的Windows系统设置恢复正常2026-04-17
如何启用项目复选框? Windows系统打开文件复选框设置的教程
Windows复选框,也称为项目复选框,允许您在文件资源管理器中轻松选择多个文件和文件夹,默认情况下,此功能在Windows中是禁用的,但您可以通过进行一些简单的自定义来快速2026-04-16
Windows系统如何设置DPI缩放? 屏幕DPI缩放设置全攻略
你是否遇到过这样的困扰:新买的4K显示器文字模糊发虚?手机屏幕图标小到看不清?这可能并非硬件问题,而是DPI设置在“捣乱”!本文将系统解析DPI设置原理与实操技巧,助你2026-04-16
微软放大招! 所有Windows镜像都将失效 强制执行阶段已到来
最近,微软在win11系统“设置-Windows安全中心-设备安全性”中新增了安全启动检查,由于一个不可忽视的“硬期限”到来,安全启动的旧证书要过期了2026-04-08



最新评论