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

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

CloseHandle(hLib) для Kernel32.dll


Изучающий_ ©   (2006-10-01 23:24:00) 

Скажите, пожалуйста, надо вызывать CloseHandle(hLib)
после hLib:=GetModuleHandle('Kernel32.dll') ?
Ведь она ( Kernel32 ) все же Kernel32, а не хухры-мухры :).


Изучающий_   (2006-10-01 23:55:00) [1]

Огромное спасибо !


guav   (2006-10-01 23:47:00) [2]

> то GetModuleHandle, а LoadLibrary

то GetModuleHandle вернёт нуль, а LoadLibrary


guav   (2006-10-01 23:45:00) [3]

да.
Причём не важно Kernel32.dll это или пользовательская библиотека.
Для Kernel32.dll лучше применить GetModuleHandle т.к. она уже точно загружена.
Дело в том, что если библиотека не загружена до вызова этих функций, то GetModuleHandle, а LoadLibrary выполнит загрузку, поэтому для библиотек, которые не гарантировано загружены, следует использовать LoadLibrary/FreeLibrary .


Изучающий_   (2006-10-01 23:41:00) [4]

Спасибо. Т.е. если я использовал LoadLibrary, то вызывать FreeLibrary
небходимо в любом случае, а если GetModuleHandle, то нет и CloseHandle
в этих случаях не применяется .
Правильно ?


Джо   (2006-10-01 23:32:00) [5]

> [3] guav ©   (01.10.06 23:28)

Тьфу, вот, называется, "смотрю в книгу, вижу фигу". Я, собственно, о LoadLibrary/FreeLibrary и разглагольствовал :) Невнимателен стал + копипаст подводит, сорри за дезинформацию...


guav   (2006-10-01 23:28:00) [6]

Нет.
Во-первых для хендлов модулей используют FreeLibrary.
Во-вторых FreeLibrary нужно вызывать для хендлов полученных LoadLibrary. LoadLibrary увеличивает счёт загрузок, FreeLibrary уменьшает и если нуль то освобождает. Таким образом GetModuleHandle с последующим освобождением приведет к выгрузке ранее чем необходимо.
Хендл, полученный GetModuleHandle не следует никак освобождать.


Джо   (2006-10-01 23:25:00) [7]

CloseHandle вовсе не безусловно закрывает дескриптор. У них свой счетчик, по достижению 0, он действительно освобождается. Но, так как открыт он не только тобой, то твой CloseHandle всего лишь уменьшит существующий счетчик на 1.


Джо   (2006-10-01 23:24:00) [8]

Нужно. Никаких исключений.


Наверх

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