Форум: "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.045 c