Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.22;
Скачать: CL | DM;

Вниз

CloseHandle(hLib) для Kernel32.dll   Найти похожие ветки 

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

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


 
Джо ©   (2006-10-01 23:24) [1]

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


 
Джо ©   (2006-10-01 23:25) [2]

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


 
guav ©   (2006-10-01 23:28) [3]

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


 
Джо ©   (2006-10-01 23:32) [4]

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

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


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

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


 
guav ©   (2006-10-01 23:45) [6]

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


 
guav ©   (2006-10-01 23:47) [7]

> то GetModuleHandle, а LoadLibrary

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
6-1148482306
LINde
2006-05-24 18:51
2006.10.22
Можна ли перезагрузить комп"ютер в сети?


4-1148422772
LiveSoft
2006-05-24 02:19
2006.10.22
Обратботка своего пункта меню


15-1159643531
Ученик чародея.
2006-09-30 23:12
2006.10.22
Чем вы пользуетесь для выбора папок?


15-1159465357
ProgRAMmer Dimonych
2006-09-28 21:42
2006.10.22
Проблемы с Дельфой


2-1159791731
svt
2006-10-02 16:22
2006.10.22
Мастера, подскажите как сделать так, чтобы правильно