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

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

FreeLibrary [D6, XP]


psa247 ©   (2006-01-07 11:27:00) 

Добрый день, подскажите почему при каждом использовании этого фрагмента кода у меня растет количество открытых дескрипторов:


SomeButtonClick(...)
begin
   HMyDll:= LoadLibrary('My.dll');
  @MyDll:= GetProcAddress(HMyDll, 'Hook');

   if Assigned(@MyDll)then MyDll(True, 12345);
   if HMyDll<>0 then FreeLibrary(HMyDll);
end;


sniknik   (2006-01-07 17:48:00) [1]

> В [1], если процедура подгружена, LoadLibrary вызывается снова.
да. ;( и сдесь спутал...


begin...end   (2006-01-07 17:43:00) [2]

> Надо <> 0.

В смысле, если <> 0, то ошибки нет. А в [1] тогда надо "= 0".


begin...end   (2006-01-07 17:41:00) [3]

> sniknik ©   (07.01.06 17:37) [3]

> "идея" - проверка на not nil. если не nil значит кнопочку
> уже нажимали и процедура подгружена.

В [1], если процедура подгружена, LoadLibrary вызывается снова.

> наоборот. знак спутал. надо <

Не надо. Надо <> 0.


psa247   (2006-01-07 17:38:00) [4]

В этом необходимость (грузить/выгружать)

> sniknik ©   (07.01.06 16:52) [1]


sniknik   (2006-01-07 17:37:00) [5]

> Э-э-э... Можно пояснить?
так в > psa247 ©   (07.01.06 11:27) написано, составлял сдесь "кусками". "идея" - проверка на not nil. если не nil значит кнопочку уже нажимали и процедура подгружена.

> Типа, DLL может загружаться только по адресам, меньшим 32? Оригинально.
наоборот. знак спутал. надо <


begin...end   (2006-01-07 17:01:00) [6]

> sniknik ©   (07.01.06 16:52) [1]

> if Assigned(@MyDll) then begin
>    HMyDll:= LoadLibrary('My.dll');

Э-э-э... Можно пояснить?

> if HMyDll >= 32 then Raise Exception.Create(xxx);

Типа, DLL может загружаться только по адресам, меньшим 32? Оригинально.


sniknik   (2006-01-07 16:52:00) [7]

а зачем каждый раз dll грузить? сделай проверку по другому

SomeButtonClick(...)
begin
 if Assigned(@MyDll) then begin
    HMyDll:= LoadLibrary('My.dll');
    if HMyDll >= 32 then Raise Exception.Create(xxx);
    @MyDll:= GetProcAddress(HMyDll, 'Hook');
    if not Assigned(@MyDll) then Raise Exception.Create(xxx);
 end;

  MyDll(True, 12345);
  //if HMyDll<>0 then FreeLibrary(HMyDll); //освободится по завершении программы (можно и самому позаботится, но лишнее)
end;


Наверх

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