Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с 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 вернёт дескриптор уже загруженного модуля.


Наверх

Титульная страница Поиск, карта сайта Написать письмо