VS2010使用Dll文件搜索顺序

1. 首先,我用VS2010创建了一个Dll工程。

编译连接后,便在Debug目录下得到了.lib.dll文件。

 

2. 然后,我再创建了一个win32控制台程序,使用这个dll文件,我使用的方式是装载时调用,所以我需要.h.lib.dll文件。

2.1 我将这3个文件复制到这个程序的目录下,然后在程序中就可以直接使用了。

2.2 在运行的过程中,我发现运行时,使用的dll文件不是当前程序目录下我复制过来的dll文件,而是利用原来Dll工程中Debug下的dll文件。

2.3 然后,我将原创建dll工程下Debug目录下的dll文件删除掉后,再执行一下这个控制台程序,发现此时调用的dll就是我复制到这个程序目录下的dll文件了。

所以我猜测lib文件中应该有记录原创建dll的目录信息,所以在使用lib的时候,程序会从lib文件中记录的dll路径去找dll来加载,从而执行;而当发现这个记录路径下没有预想的dll文件后,系统就会从程序当前路径找相应的dll,于是就找到了我们复制过来的dll文件,于是程序便可以执行了。

lib文件中记录有原dll文件信息有一个好处,那就是只要我不改变库文件接口,而是更新原接口的操作,这样重新编译生成新的dll文件,这样就不需要每次更新库接口操作后,都要将新的.lib.dll文件复制到需要使用的地方,这样就很方便。当然这只是在本机调试时比较方便,如果已经发布了dll,那么每次更新dll,都要给用户发布这个新的dll文件。如果dll文件中增加了新的接口函数或改变了接口名称,那么就要利用新的.h文件和.lib文件,重新构建生成应用程序,然后将这个升级版的应用程序和新的dll发布给用户,进行更新。

相关问题:

. 程序执行时,系统装在dll文件的路径顺序?lib文件记录路径——>程序当前路径——>??

参考地址:http://msdn.microsoft.com/zh-cn/library/7d83bc18(VS.80).aspx

通过隐式和显式链接,Windows 首先搜索已知 DLL”,如 Kernel32.dll User32.dllWindows 然后按下列顺序搜索 DLL

1.      当前进程的可执行模块所在的目录。

2.      当前目录。

3.      Windows 系统目录。GetSystemDirectory 函数检索此目录的路径。

4.      Windows 目录。GetWindowsDirectory 函数检索此目录的路径。

5.      PATH 环境变量中列出的目录。

. dll构建程序时,如何处理dll更新升级问题?这个问题比较大、复杂,以后用的时候,慢慢总结吧。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值