Image

Imagehitfounder wrote in Imageru_cpp

Category:

Загрузка копий dll

Может быть кто сталкивался с таким вопросом: есть dll, там выполняется некоторая функция использующая глобальные данные из библиотеки, нужно запустить параллельно несколько копий этой функции на разных входных данных, причём каждая из копий должна работать в своём локальном адресном пространстве. Т.е. необходимо сделать некий аналог запуска копий приложения, только запускать надо не exe а dll. Возможно ли такое?

Если линковать статически, то в любом случае данные используемые функцией будут глобальнымы и сколько бы копий функции не запускать, они будут обращаться к одним и тем же данным. Если линковать динамически, то dll будет загружаться в память один раз, а при повторной загрузке будет возвращён дискриптор на уже имеющуюся область памяти, получается копии функций всё равно будут работать с одними и теми же данными.

Можно конечно править саму dll, например создав глобальный массив структур данных, а при запуске функции указывая к какой именно структуре из массива нужно обращаться, или просто перенести все данные в локальную область, но честно говоря не хочется заморачиваться, и сильно править билиотеку.