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

Вниз

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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.027 c
1-1117618938
Стас
2005-06-01 13:42
2005.06.29
Что за ошибка


14-1117204178
Сатир
2005-05-27 18:29
2005.06.29
У кого есть фотка команды Microsoft 78-го года ?


3-1116000911
NikNet
2005-05-13 20:15
2005.06.29
А как подключится к MSSQL или там работать с MSSQL на WinAPI?


14-1117171979
MBo
2005-05-27 09:32
2005.06.29
Пятничные головоломные задачки


14-1117209306
sasa123
2005-05-27 19:55
2005.06.29
требуется delphi программист