Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.04.24;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
2-1295504959
Novi4ok1992
2011-01-20 09:29
2011.04.24
Выбор языка интерфейса в программе


15-1293095836
Павел Калугин
2010-12-23 12:17
2011.04.24
Встретим новый год в Нижнем Новгороде?


15-1294781400
Юрий
2011-01-12 00:30
2011.04.24
С днем рождения ! 12 января 2011 среда


6-1236668556
К
2009-03-10 10:02
2011.04.24
EIdConnClosedGracefully Connection Closed Gracefully


15-1294766702
P
2011-01-11 20:25
2011.04.24
Недокументированная QuerySystemInformation