【问题标题】:Load multiple copies of dll in same process在同一进程中加载​​多个dll副本
【发布时间】:2010-12-07 21:56:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ windows dll process multithreading


    【解决方案1】:

    不幸的是,NT 核心DLL loader routines 没有公开一个公共接口来跳过已加载的 DLL 池。因此,您只剩下几个选择:

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

    【讨论】:

    • 请注意,如果 DLL 假设每个进程只加载一次(一个非常合理的假设),选项 1 和 3 可能会中断。 COM DLL 可能特别容易受到攻击,因为两个副本都可能声称相同的 GUID/接口。
    【解决方案2】:

    您可以做到这一点的唯一方法是拥有同一个 dll 的多个副本,然后动态加载它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-28
      • 2016-12-08
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2013-02-27
      • 1970-01-01
      相关资源
      最近更新 更多