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

Вниз

FreeLibrary   Найти похожие ветки 

 
bc0113   (2005-05-05 22:34) [0]

можно ли запретить выгрузку DLL после вызова FreeLibrary, до некоторого момента? про счетчики использования и т.д.объяснять пожалуйста не надо, DLL загружает приложение через LoadLibrary использует ее и тут же выгружает FreeLibrary, больше ее не использует не кто Windows ее выгружает из памяти, мне бы хотелось узнать можно ли сделать так чтобы DLL осталась в память и завершения работы вызвавшего ее приложения?


 
default ©   (2005-05-05 22:59) [1]

обычно, когда нужно использование DLL до конца работы приложения их статически линкуют(на этапе компиляции)
если DLL можно не обнаружить и нужно линковать динамически и надо держать DLL до конца работы приложения что мешает до конца работы приложения не вызывать FreeLibrary?
windows только может выгрузить DLL из памяти после всех FreeLibrary, хотя есть вроде нештатные приёмы выгрузки


 
bc0113   (2005-05-05 23:11) [2]

если я чего не ясно объяснил тогда еще раз. DLL моя вызывающее ее приложение не мое. Приложение загружает dll путем вызова LoadLibrary, динамической линковки, использует некоторые функции а затем выгружает вызывлм FreeLibrary. Мне бы очень хотелось чтобы после этого DLL осталась в памяти, я пытался перехватить вызов FreeLibrary методом предложенным Рихтером, т.е. путем изменения таблицы импорта, но оказалось что приложения, которое загружает DLL упаковано, и в таблице импорта нет FreeLibrary, т.е. этот метод не очень подходит, может кто посоветует другой?


 
default ©   (2005-05-05 23:19) [3]

ну "вражеское приложение" же обязательно будет какие-то ф-ции Вашей DLL вызывать? можно в них закинуть вызов LoadLibrary чтобы увеличить счётчик ссылок на 1(ну и использовать глобальную переменную DLL для того чтобы не увеличивать счётчик при вызовах ф-ий DLL неограничено) всё-равно когда "враж-ое прилож-ие" будет выгружаться винда всё подчистит за Вами


 
bc0113   (2005-05-05 23:22) [4]

я думал об этом, спасибо, за совет, надо будет это попробывать, единственное что меня смущает это будет ли увеличен счетчик ссылок на DLL если я из нее вызову LoadLibrary самой себя?


 
default ©   (2005-05-05 23:25) [5]

bc0113   (05.05.05 23:22) [4]
да, после линковки DLL она становится куском процесса вызвавшего LoadLibrary
поэтому можно считать что LoadLibrary вызвал сам процесс


 
bc0113   (2005-05-05 23:30) [6]

ну что спасибо за совет, буду копать в этом направлении


 
default ©   (2005-05-05 23:42) [7]

в принципе LoadLibrary можно просто вставить в каждой функции
хоть счётчик и не резиновый, когда наступить предел LoadLibrary просто вернёт False, а после завершения чужого приложения винда всё подчистит, но лучше сделать через булев флаг
в секции реализации DLL
var
 F: Boolean = False;
...
а в ф-ях писать типа
if not F then begin
  LoadLibrary(...);
  F := True;
 end;
так производительней будет



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

Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1115984786
IGray
2005-05-13 15:46
2005.06.29
Как узнать, было ли к таблице применено ApplyRange?


3-1116023469
VarAX
2005-05-14 02:31
2005.06.29
Как InterBase заставить с русским работать


1-1118107653
Rat
2005-06-07 05:27
2005.06.29
Как в DBGrid сделать дополнительный bookmark


14-1117979160
Kolan
2005-06-05 17:46
2005.06.29
Компилятор С для Pic контроллеров


14-1117631264
Kerk
2005-06-01 17:07
2005.06.29
Тополинный пух...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский