读书人

dll加载顺序怎么改变

发布时间: 2012-02-25 10:01:48 作者: rapoo

dll加载顺序如何改变
我想问的是
我的程序里面隐式调用了xxx.dll 动态连接库,这个xxx.dll所在的目录和程序在同一个目录下,
现在 在system32这个目录下也有个名字为xxx.dll另外一个版本动态连接库。

如何让,我的程序调用的是system32目录下的xxx.dll这个动态连接库文件而不是同一目录下的xxx.dll,请大家给点意见。

(说明:目前,我这个程序用的是同一目录下的xxx.dll这个有动态连接库,如果我删了这个目录里的xxx.dll就能正确调用 system32目录下的xxx.dll。还有就使用的是LoadLibrary不是LoadLibraryEx)

[解决办法]
GetSystemDirectory 可以获取系统system路径

[解决办法]
这种情况还是loadlibrary来显示加载dll,这样可以控制路径。
[解决办法]
隐式连接到,无法控制,系统加载DLL时,EXE的当前目录优先权最高。

如果想控制,可能用LoadLibrary来显示加载。
[解决办法]
我说这个问题怎么这么眼熟呢!
http://topic.csdn.net/u/20111002/02/08c98d18-2522-40d2-9f96-15263ba3553e.html?27655
刚答完,原理差不多
[解决办法]
文件有搜索顺数,只要你的dll和应用程序放在一起,优先调用你dll而不是系统的,只有你目录没有dll
才会调用系统的,不用担心。
用LoadLibrary 可以显式指定文件目录。
[解决办法]
为什么有这样的需求??
如果不改动程序,你可以把 system32 下的 dll 覆盖掉应用程序目录下的。
或者吧应用程序下的 dll 删除掉。。。
[解决办法]
还是改个名字好。 避免这些无谓的麻烦
[解决办法]
如果你安装了MSDN2008
下面的地址
ms-help://MS.MSDNQTR.v90.chs/dllproc/base/dynamic_link_library_redirection.htm

标题是“Dynamic-Link Library Redirection”

你可以看看,上面说,即时你用绝对路径 加载别的路径的dll,用了这个重定向,也会加载同目录的dll的。

根据我的理解,使用 Side-by-side Assemblies 的话,可能会解决此问题,但我还没看懂怎么做。。。

读书人网 >VC/MFC

热点推荐