Загрузите два экземпляра одной и той же DLL в Delphi

Вот моя проблема: я хотел бы создать два отдельных экземпляра одной и той же DLL.

Следующее не работает, потому что Handle1 и Handle2 получат один и тот же адрес

  Handle1 := LoadLibrary('mydll.dll');
  Handle2 := LoadLibrary('mydll.dll');

Следующее работает, но я должен сделать копию DLL и переименовать ее во что-то другое (что кажется немного глупым)

  Handle1 := LoadLibrary('mydll.dll');
  Handle2 := LoadLibrary('mydll2.dll');

Есть ли способ иметь только один файл DLL, но загрузить несколько его экземпляров?

3 ответа

Я не думаю, что это возможно.

Вы должны написать.exe, который загружает DLL. Затем вы можете охватить несколько процессов (.exe), и каждый будет запускать свой собственный экземпляр библиотеки DLL. Вам придется использовать методы IPC (межпроцессное взаимодействие) для связи с.exes. Конечно, выполнимо, но не совсем понятно.

Он не будет работать с LoadLibrary, потому что Windows проверяет, была ли DLL уже загружена, и будет возвращать один и тот же дескриптор снова и снова.

У меня есть некоторый код, который изначально предназначался для загрузки библиотеки DLL из ресурса, привязанного к исполняемому файлу, но я думаю, что можно было бы сделать то же самое для области памяти, которая была заполнена содержимым файла. Я не вижу никакой причины, почему это не сработало бы дважды, но я не проверял это.

Вы можете найти его здесь: http://svn.berlios.de/viewvc/dzchart/utilities/dzLib/trunk/src/u_dzResourceDllLoader.pas?view=markup

Это часть моей библиотеки dzlib, которая доступна под MPL.

Windows XP представила параллельное выполнение для Win32 DLL ( эти парни много знают об этом).

С большим количеством обручей вы можете теперь:

Другие вопросы по тегам