【发布时间】:2011-06-28 10:46:58
【问题描述】:
我想完全按照here 的描述去做,但接受的解决方案对我不起作用。我想原因解释here:
如果加载了具有依赖关系的 DLL 通过指定完整路径,系统 搜索 DLL 的依赖 DLL 好像他们只装载了他们的 模块名称。
如果一个具有相同模块名称的 DLL 是 已经加载到内存中,系统 仅检查重定向和 在解决之前表现出来 加载的DLL,不管是哪个目录 它在。系统不搜索 对于 DLL。
我希望我的应用程序具有以下结构。
c:\Exe
|
|----- c:\DLL\DLL.dll, c:\DLL\common.dll
|
|----- c:\DLL2\DLL2.dll, c:\DLL2\common.dll
我的 EXE 将通过以下方式加载 DLL
LoadLibrary("c:\\DLL\\DLL.dll");
LoadLibraryEx("c:\\DLL2\\DLL2.dll");
common 在这两种情况下都被隐式加载。
我尝试了 SetDllDirectory 选项,但始终只加载了一个 common.dll。
我在 common.dll 中添加了版本信息。 c:\DLL\common.dll 的版本为 2.0.1.0,而 c:\DLL2\DLL2.dll 的版本为 4.0.1.0
我在以下清单中嵌入了相应的版本信息,但没有帮助。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="common" version="4.0.1.0" processorArchitecture="x86"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
这个问题有解决办法吗?
【问题讨论】:
标签: c++ visual-c++ windows-xp dll