создать несколько копий одной dll-ки в памяти
сделать три копии d - d1,d2,d3
и в a,b,c вместо LoadLibrary("d.dll") вставить соответственно LoadLibrary("d(1,2,3).dll")
и в a,b,c вместо LoadLibrary("d.dll") вставить соответственно LoadLibrary("d(1,2,3).dll")

при каждом вызове dll-ки d необходимо создавать внутрии неё по одному экземпляру какого-нибудь класса. Переменные юзать внутри каждого экземпляра
это клево, но во многих длл нет никаких классов
Значит, это фиговые длл. Во всех нормальных есть что-то вроде Library* initLibrary;, если так уж не нравятся классы.
Эм...
Приведи список нормальных dll. Хотя бы штучки три узнаваемых.
Приведи список нормальных dll. Хотя бы штучки три узнаваемых.
freetype, fontconfig. Это, конечно, не dll, но принцип-то общий.
Еще куча, которым это просто не надо - не имеют состояния, или состояние хранит пользователь.
Лучше ты приведи пример библиотеки, обладающей вышеописанным недостатком.
Про mpi фигню сказал.
Еще куча, которым это просто не надо - не имеют состояния, или состояние хранит пользователь.
Лучше ты приведи пример библиотеки, обладающей вышеописанным недостатком.
Про mpi фигню сказал.
Внимание: принцип не общий. Вопрос был про dll-ки, ответ должен быть про dll-ки.
Никто тебе ничего не должен, не нравится мой пример - придумывай свой.
Я это к тому, что ты фигню сказал. dll-ки это просто набор функций. То, что предлагаешь ты, больше на COM похоже, но вопрос-то не про него.
Если этот набор функций заводит себе глобальную переменную, то становится чем-то похожим на объект. И если при этом отсутствует что-то похожее на конструктор, то использовать их - затруднительно. Особенно в больших приложениях, когда две компоненты могут независимо захотеть воспользоваться библиотекой.
Да, я теперь понял, о чем ты говоришь. Действительно, это правильный подход. Но такое не везде.
а просто дело в том, что ту dll-ку, которую надо много раз загружать, не я писал
единственный способ, который сразу доступен - это тот что написал ПропеллерМан во втором посте.
пропатчить (исходники или бинарники) dll-ки a,b,c чтобы они грузили эту либу с разными именами.
может и другие способы есть, но это уже будет еще большим извратом..
пропатчить (исходники или бинарники) dll-ки a,b,c чтобы они грузили эту либу с разными именами.
может и другие способы есть, но это уже будет еще большим извратом..
Оставить комментарий
NataNata
есть dll-ки a,b,c, которые используют функцию из dll-ки dпрограмма одновременно загружает a,b,c с помощью loadlibrary
dll-ка d имеет внутри себя некие глобальные (в пределах d) переменные, которые нужно настроить и a, и b, и с
вопросы: как сделать так, чтобы загружалось 3 копии dll-ки d, чтобы каждая была для библиотеки, которая ее использует?