Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.065 c
15-1159463241
Layner
2006-09-28 21:07
2006.10.22
Расчет полиноминального тренда 6й степени


1-1157956587
yahaha
2006-09-11 10:36
2006.10.22
Вывод в нестандартные окна


2-1159899021
majer_rv
2006-10-03 22:10
2006.10.22
вставить строку в файл


4-1149187418
serko
2006-06-01 22:43
2006.10.22
Трафик Инспектор и Delphi


6-1148975869
DVM
2006-05-30 11:57
2006.10.22
Программно добавить привязку Binding в TIdUDPServer?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский