создать несколько копий одной dll-ки в памяти

NataNata

есть dll-ки a,b,c, которые используют функцию из dll-ки d
программа одновременно загружает a,b,c с помощью loadlibrary
dll-ка d имеет внутри себя некие глобальные (в пределах d) переменные, которые нужно настроить и a, и b, и с
вопросы: как сделать так, чтобы загружалось 3 копии dll-ки d, чтобы каждая была для библиотеки, которая ее использует?

okunek

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

Corrector

при каждом вызове dll-ки d необходимо создавать внутрии неё по одному экземпляру какого-нибудь класса. Переменные юзать внутри каждого экземпляра

maggi14

это клево, но во многих длл нет никаких классов

ppplva

Значит, это фиговые длл. Во всех нормальных есть что-то вроде Library* initLibrary;, если так уж не нравятся классы.

Helga87

Эм...
Приведи список нормальных dll. Хотя бы штучки три узнаваемых.

ppplva

freetype, fontconfig. Это, конечно, не dll, но принцип-то общий.
Еще куча, которым это просто не надо - не имеют состояния, или состояние хранит пользователь.
Лучше ты приведи пример библиотеки, обладающей вышеописанным недостатком.
Про mpi фигню сказал.

Helga87

Внимание: принцип не общий. Вопрос был про dll-ки, ответ должен быть про dll-ки.

ppplva

Никто тебе ничего не должен, не нравится мой пример - придумывай свой.

Helga87

Я это к тому, что ты фигню сказал. dll-ки это просто набор функций. То, что предлагаешь ты, больше на COM похоже, но вопрос-то не про него.

ppplva

Если этот набор функций заводит себе глобальную переменную, то становится чем-то похожим на объект. И если при этом отсутствует что-то похожее на конструктор, то использовать их - затруднительно. Особенно в больших приложениях, когда две компоненты могут независимо захотеть воспользоваться библиотекой.

Helga87

Да, я теперь понял, о чем ты говоришь. Действительно, это правильный подход. Но такое не везде.

NataNata

а просто дело в том, что ту dll-ку, которую надо много раз загружать, не я писал

gopnik1994

единственный способ, который сразу доступен - это тот что написал ПропеллерМан во втором посте.
пропатчить (исходники или бинарники) dll-ки a,b,c чтобы они грузили эту либу с разными именами.
может и другие способы есть, но это уже будет еще большим извратом..
Оставить комментарий
Имя или ник:
Комментарий: