![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Нужно. Никаких исключений.