Форум: "Основная";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
ВнизDLL и глобальные переменные Найти похожие ветки
← →
KSergey © (2009-09-14 11:13) [0]Есть DLL. В ней есть глобальные переменные.
Она несколько раз подгружается одним процессом.
Вопрос: есть ли волшебный метод сделать так, чтобы глобальные переменные у каждого загруженного экземпляра DLL были свои?
Интересует любой метод, который бы позволил добиться желаемого минимальной модификаций исходников.
← →
Медвежонок Пятачок © (2009-09-14 11:18) [1]они и так будут свои у каждого процесса
← →
Медвежонок Пятачок © (2009-09-14 11:20) [2]Вопрос: есть ли волшебный метод сделать так, чтобы глобальные переменные у каждого загруженного экземпляра DLL были свои?
Встречный вопрос: откуда уверенность, что один и тот же процесс будет иметь "несколько экземпляров" одной и той же длл?
← →
Сергей М. © (2009-09-14 11:22) [3]
> Она несколько раз подгружается одним процессом
Имеется ввиду - одним и тем же ?
Тогда
> у каждого загруженного экземпляра DLL
лишено смысла : экземпляр одной и той же DLL в одном и том же процессе всегда один и тот же.
← →
KSergey © (2009-09-14 11:32) [4]> Сергей М. © (14.09.09 11:22) [3]
> > Она несколько раз подгружается одним процессом
> Имеется ввиду - одним и тем же ?
Да.
> > у каждого загруженного экземпляра DLL
> лишено смысла : экземпляр одной и той же DLL в одном и том же процессе всегда один и тот же.
Хм, а ведь и правда. Фигня получается, увы :(
Спасибо.
← →
Сергей М. © (2009-09-14 11:50) [5]
> KSergey © (14.09.09 11:32) [4]
Но здесь, возможно, будет уместно упомянуть оthreadvar
← →
KSergey © (2009-09-14 12:53) [6]> Сергей М. © (14.09.09 11:50) [5]
Да есть такое, но моя dll-ка вроде не под разными потоками вызывается (вернее не гарантированно под разными для разных экземпляров), хотя надо уточнить в соседней комнате :)
← →
DVM © (2009-09-15 01:30) [7]
> KSergey ©
Зачем понадобилась такая ерунда с переменными.
Делай как все нормальные люди.
Заводи в DLL функцию, скажем Init(), которая возвратит тебе, скажем экземпляр класса, который будет создан внутри этой dll. Используй возвращенное число как некий хендл для доступа к полям этого класса (там и будут лежать твои переменные) либо напрямую, либо через вспомогательные функции.
← →
Медвежонок Пятачок © (2009-09-15 09:09) [8]...... и получишь классические грабли
← →
Медвежонок Пятачок © (2009-09-15 09:51) [9]хотя если в хост-приложении использовать возвращенное значение как cardinal, а приведение делать в длл, то прокатит
← →
DVM © (2009-09-15 11:57) [10]
> Медвежонок Пятачок © (15.09.09 09:09) [8]
> ...... и получишь классические грабли
Никаких граблей не будет. Хост приложение знать не знает о том, что возвращенное ему значение есть на самом деле указатель на экземляр объекта в этой самой DLL. Хост приложению это число нужно исключительно для того, чтобы передавать его в прочие функции DLL. А уже сама DLL будет с этим числом обращаться как с указателем на экземпляр объекта и обращаться по нему к конкретному экземпляру. Да примерно так половина DLL устроена, где есть функция иннициализации, возвращающая некий абстрактный хендл.
← →
Медвежонок Пятачок © (2009-09-15 12:49) [11]Тогда надо яснее выражаться, а не пугать людей таким вот:
которая возвратит тебе, скажем экземпляр класса
← →
clickmaker © (2009-09-15 13:31) [12]а чего тут неясного?
"экземпляр класса, который будет создан внутри этой dll. Используй возвращенное число как некий хендл для доступа к полям этого класса"
понятно же, что указатель
← →
Медвежонок Пятачок © (2009-09-15 13:52) [13]да вот хренушки.
речь шла о длл, которая возвратит тебе, скажем экземпляр класса
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2011.04.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c