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