![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с DLL
Washington © (2008-01-11 10:51:00)У меня есть несколько библиотек. И я динамически их загружаю, когда мне нужно. Как проверить, загружена ли библиотека, чтобы не запустить её второй раз?
Сергей М. (2008-01-11 13:14:00) [1]
> clickmaker © (11.01.08 13:10) [11]
Не царское это дело - хранить и контролировать хэндлы)
clickmaker (2008-01-11 13:10:00) [2]вообще, странная задача
если DLL грузится, значит хендл где-то сохраняется?
почему его не проверять на 0?
а при выгрузке обнулять
Сергей М. (2008-01-11 12:09:00) [3]
> Григорьев Антон © (11.01.08 12:05) [9]
Да это-то понятно)
Но это по сути и загрузкой-то назвать нельзя - всего лишь инкремент счетчика.
Григорьев Антон (2008-01-11 12:05:00) [4]
> Сергей М. © (11.01.08 12:01) [8]
> Код между begin и end как раз и выполняется именно при загрузке)
Цитата из описания LoadLibrary в MSDN:
If the module is a DLL not already mapped for the calling process, the system calls the DLL's DllMain function with the DLL_PROCESS_ATTACH value.
Т.е. как раз если бы форма создавалась здесь, то она создавалась бы один раз - второй раз DllMain не вызывалась бы.
Сергей М. (2008-01-11 12:01:00) [5]
> Нет, не здесь
Как же "не здесь", когда, судя по твоей же фразе, "при загрузке .. грузится .. форма" ?
Код между begin и end как раз и выполняется именно при загрузке)
Washington (2008-01-11 11:55:00) [6]
> Игорь Шевченко © (11.01.08 11:25) [4]
Вот и я об этом. Зачем мне две одинаковые формы?
> Плохиш © (11.01.08 11:31) [5]
Не знаю. Прочитал в книге (не Фленов), сделал
> Сергей М. © (11.01.08 11:43) [6]
Нет, не здесь :)
И вообще я уже разобрался
Сергей М. (2008-01-11 11:43:00) [7]
> Washington © (11.01.08 11:01) [2]
т.е.
Library MyLib;
..
begin
.. форма создается здесь? ..
end;
Умней ничего не придумал ?)
Плохиш (2008-01-11 11:31:00) [8]
> У меня есть несколько библиотек.
> У меня форма в модуле находится.
Мне интересно, использовать dll не по назначению - это мода сейчас такая или задания по лабораторным?
Игорь Шевченко (2008-01-11 11:25:00) [9]Washington © (11.01.08 11:01) [2]
Зачем тебе две формы ?
clickmaker (2008-01-11 11:02:00) [10]h := GetModuleHandle('some.dll');
if (h = 0) then
h := LoadLibrary('some.dll');
Washington (2008-01-11 11:01:00) [11]У меня форма в модуле находится. И в результате при загрузке раннее загруженного модуля у меня грузится вторая форма.
Григорьев Антон (2008-01-11 10:56:00) [12]Система сама проверит и не станет загружать второй раз, LoadLibrary вернёт дескриптор уже загруженного модуля.