2009-10-19 5 views
9

У меня есть dll, созданный третьей стороной, у которой есть своего рода внутренняя структура данных, которая ограничивает размер X элементами.Загрузите несколько копий DLL в один и тот же процесс

Так что, в основном, он имеет очередь с X в качестве предела.

Теперь из того, что я знаю, DLL для каждого процесса, но можно ли загрузить DLL более одного раза? Может быть, за нить? В C#? или в C++/CLI?

Я пытаюсь загрузить родную dll C++.

ответ

5

Единственный способ сделать это - иметь несколько копий одной и той же библиотеки, а затем загружать их динамически.

7

К сожалению, ядро ​​NT DLL loader routines не предоставляет публичный интерфейс для пропуска пула уже загруженных библиотек DLL. Таким образом, вы остались лишь несколько вариантов:

  • Copy, HardLink, линк, и/или использовать точки повторной обработки, чтобы обмануть загрузчик, думая, у вас есть несколько различных библиотек DLL.
  • Используйте несколько процессов и загрузите одну DLL за процесс.
  • Написать новый DLL загрузчик (очень не для слабонервных!)
  • Убедите поставщика в DLL, чтобы исправить это (вероятно, будет сложнее, чем писать DLL загрузчик :)
+2

Обратите внимание, что варианты 1 и 3 может сломаться, если DLL предполагает, что он загружается только один раз за процесс (довольно разумное предположение). COM-библиотеки DLL могут быть исключительно уязвимыми, так как обе копии могут требовать один и тот же GUID/интерфейс. – MSalters

Смежные вопросы