相关疑难解决方法(0)

在同一进程中加载​​同一DLL的2个版本

我想完全按照这里描述的那样做,但是接受的解决方案对我不起作用.我想这里解释的原因是:

如果通过指定完整路径来加载具有依赖项的DLL,则系统将搜索DLL的相关DLL,就好像它们仅使用其模块名称一样加载.

如果已在内存中加载具有相同模块名称的DLL,则系统会在解析到加载的DLL之前仅检查重定向和清单,无论它在哪个目录中.系统不会搜索DLL.

我希望我的应用程序在以下结构中.

c:\Exe
 |
 |----- c:\DLL\DLL.dll, c:\DLL\common.dll 
 |
 |----- c:\DLL2\DLL2.dll, c:\DLL2\common.dll
Run Code Online (Sandbox Code Playgroud)

我的EXE将加载DLL

LoadLibrary("c:\\DLL\\DLL.dll");
LoadLibraryEx("c:\\DLL2\\DLL2.dll");
Run Code Online (Sandbox Code Playgroud)

在两种情况下都隐式加载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>
Run Code Online (Sandbox Code Playgroud)

有这个问题的解决方案吗?

c++ dll windows-xp visual-c++

8
推荐指数
1
解决办法
3812
查看次数

可以在同一个应用程序中加载不同版本的DLL吗?

我的应用程序使用一个版本的库(a.dll),我正在使用另一个DLL(b.dll),后者又使用我使用的相同库(a.dll)的旧版本.我正在通过嵌入清单文件来构建应用程序.我使用的DLL也使用嵌入式清单文件.我在WinSXS文件夹中有两个版本的库.我的应用程序无法加载适当版本的DLL.

是否有单独的清单文件(不嵌入DLL)有助于解决问题?有什么工作?

c++ dll manifest dllimport

6
推荐指数
1
解决办法
3091
查看次数

标签 统计

c++ ×2

dll ×2

dllimport ×1

manifest ×1

visual-c++ ×1

windows-xp ×1