Загрузите одну и ту же dll несколько раз [закрыто]
Я хочу загрузить ту же dll, например Lib.dll несколько раз!
- > нужно создать новый процесс (функция CreateProcess) для каждого LoadLibrary!
У кого-нибудь есть пример или некоторые подсказки?!
Thx и приветствует
3 ответов
похоже, вы хотите, чтобы каждый экземпляр DLL имел отдельные сегменты данных. Это единственная причина, по которой я могу задать этот вопрос.
единственный способ достичь этого-убедиться, что каждый раз, когда вы вызываете LoadLibrary
, DLL имеет другое имя файла. Скопируйте DLL во временный файл каждый раз, когда вам нужно загрузить его, убедившись, что имя, которое вы используете, отличается от любого загруженного экземпляра DLL.
Я повторяю комментарии выше, которые побуждают вас перепроектировать архитектуру системы.
вы не можете загружать одну и ту же DLL несколько раз в один процесс (или нет и не имеют никакого эффекта).
из ваших комментариев DLL делает разные вещи в зависимости от одного из вызовов функций, поэтому вам нужно будет использовать систему "сеанса", где вы храните отдельные наборы данных для каждого и создаете их по мере необходимости (через другой вызов) и передаете дескриптор или аналогичный каждому вызову функции. Так работает большинство Win32 API (дескрипторы файлов, дескрипторы окон, объекты GDI, и т. д.)
Если вы сделаете DLL com-хостом и используете COM-объекты, это будет автоматически обрабатываться каждым экземпляром класса.
Если вы хотите использовать отдельный процесс, то вы можете сделать это, запустив новый процесс только для размещения DLL и использовать одну из многих форм IPC для связи с ним.
вы рассматриваете DLL как экземпляр объекта. Это совсем не так, как работают DLL. Dll-это не объекты, это куча кода и ресурсов. Эти вещи не меняются, независимо от того, сколько раз вы теоретически можете загрузить DLL. Таким образом, не было бы смысла иметь несколько экземпляров DLL, загруженных в одном и том же процессе.
Это отличный пример того, почему глобальные переменные, как правило, плохая идея. Данные должны быть созданы по мере необходимости.
Так если вам нужно несколько экземпляров объекта для работы, вы должны создать DLL, чтобы сделать именно это. Как говорили другие, какой-то сеанс или просто какой-то объект, который вы можете создать, когда захотите.
это абстрактный ответ на абстрактный вопрос. Было бы очень полезно, если бы вы могли объяснить больше о том, что именно делает эта DLL, и почему вам нужно несколько экземпляров.