在同一进程中加载​​dll的多个副本

hal*_*ton 9 c++ windows dll multithreading process

我有一个由第三方生产的dll,它具有某种内部数据结构,将其大小限制为X元素.

所以基本上,它有一个以X为限制的队列.

现在从我所知道的DLL是每个进程,但是可以多次加载DLL吗?也许每个线程?在C#?或者在C++/CLI中?

我正在尝试加载本机c ++ dll.

bdo*_*lan 7

不幸的是,NT核心DLL加载器例程不公开公共接口来跳过已经加载的DLL池.因此,您只剩下几个选择:

  • 复制,硬链接,符号链接和/或使用重新分析点来欺骗加载器以为您有多个不同的DLL.
  • 使用多个进程,并为每个进程加载一个DLL.
  • 编写一个新的DLL加载器(非常不适合胆小的人!)
  • 说服DLL的供应商修复它(可能比编写DLL加载器更难:)

  • 请注意,如果DLL假定每个进程只加载一次(非常合理的假设),则选项1和3可能会中断.COM DLL可能特别容易受到攻击,因为两个副本都可以声明相同的GUID /接口. (2认同)

Sha*_*men 5

你可以做到的唯一方法是拥有相同dll的多个副本,然后动态加载它们.