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

发布于 2024-08-08 08:32:20 字数 175 浏览 1 评论 0原文

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

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

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

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

I have a dll produced by a third party that has some sort of internal datastructure that limits it's size to X elements.

So basically, it has a Queue with X as the limit.

Now from what I've known DLL's are per process, but is it possible to load a DLL more than once? Maybe per thread? In C#? or in C++/CLI?

I'm trying to load a native c++ dll.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

与风相奔跑 2024-08-15 08:32:20

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

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

Unfortunately, the NT core DLL loader routines don't expose a public interface to skip the pool of already-loaded DLLs. As such, you're left with just a few choices:

  • Copy, hardlink, symlink, and/or use reparse points to fool the loader into thinking you have multiple distinct DLLs.
  • Use multiple processes, and load one DLL per process.
  • Write a new DLL loader (very much not for the faint of heart!)
  • Convince the DLL's vendor to fix it (likely to be harder than writing a DLL loader :)
洛阳烟雨空心柳 2024-08-15 08:32:20

唯一的方法是拥有同一个 dll 的多个副本,然后动态加载它们。

The only way you can do it is by having multiple copies of the same dll, and then load them dynamically.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文