![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Допустим, что у меня есть класс, вся работа с классом сосредоточена сейчас в одном модуле, что-то типа (код схематичен):
Таким образом для меня из других модулей использование MyVar и TMyClass полностью прозрачно... Я бы хотел выделить этот код в DLL, но есть определённая трудность: в приведенном модуле экцемпляр класса TMyClass создаётся только один раз и уничтожается только один раз при том что процедуры могут вызываться многократно. А как такое сделать в DLL? Дело в том что создание TMyClass процесс довольно сложный и длительный, а вызовов процедур много, если создавать экземпляр класса в каждом вызове, то производительность кода будет очень большая, в то же время если в DLL есть код инициализации в который я смогу впихнуть создание объекта (а будет ли это корректно?), то секции кода завершения нет, и вообще, при двух вызовах процедуры из DLL будет использоваться тот же экземпляр глобальной переменной или каждый раз новый? (и отличается ли это при статической и динамической загрузке?) -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
На самом деле есть входная точка в dll. То есть функция, которая вызывается при кажой загрузки/выгрузке dll. В эту функцию передается значение hInstance и Reason. Reason как раз и указывает загружается dll или выгружается, здесь то и можно инциализировать/деинициализировать что ты хочешь. Запрятана эта функция в SysInit или в Systm. Однако предоставляется переменная DllProc в SysInit. Это есть указатель на процедуру типа:
procedure (Reason: Integer); пожалуй, если ты после begin напишишь DllProc:=MyDllMain; // это твоя процедура инициализации. то получешь , что надо.
Не очень понятен вопрос. Если процесс один, то и данные Dll для него те же на протяжении всего использования. От типа загрузки это не зависит. -------------------- Волны гасят ветер... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |