Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.028 c
14-1117215030
Dream3D
2005-05-27 21:30
2005.06.29
Посоветуйте сайт


3-1116318754
ANB
2005-05-17 12:32
2005.06.29
Как указать сортровку при апдейте в Оракле ?


1-1118068965
VadimX
2005-06-06 18:42
2005.06.29
Визуальный объект 2 в одном.


4-1114425641
Leonid
2005-04-25 14:40
2005.06.29
Как определить версию Windows ?


1-1117605664
mmms
2005-06-01 10:01
2005.06.29
Помогите разобрать строку, нужно взять только цифры с "конца"




   Наверх