Форум: "WinAPI";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Внизвыгрузка DLL Найти похожие ветки
← →
AlexSK (2002-03-20 12:38) [0]Как выгрузить, загруженную ранее (LoadLibryay) DLL!
FreeLibryay - выгружает, но Dll ысе равно считается используемой приложением, до завершения приложения!
← →
Виктор Щербаков (2002-03-20 12:42) [1]Сколько раз вызвана LoadLibrary, столько раз и нужно вызвать FreeLibrary. Тогда счетчик использований обнулится и система не будет считать dll используемой твоим (не остальными) приложением. Вот и все дела.
← →
VuDZ (2002-03-20 12:46) [2]ещё небольшой ньюанс - винтукей держит в памяти некоторое время dll даже после всех выгрузок - вдруг кому понадобиться, в этом же и смысл KnowDLLs в реестре, так что если занимаешся отладкой таким образом - надо реестр немножко править
← →
Fellomena (2002-03-20 13:17) [3]Именно - именно, система кэширует dll на случей последующего использования.
А FreeLibrary, вообще говоря, не выгружает, а освобождает dll.
← →
Виктор Щербаков (2002-03-20 13:28) [4]Дык ведь речь и не шла о выгрузке из физической памяти.
В вопросе говорилось о счетчике использования.
← →
VuDZ (2002-03-20 13:40) [5]это был ответ на упреждение, мало ли что...
← →
AlexSK (2002-03-20 13:45) [6]Да это все замечательно! Это то я все заню!
НО мне нужно удалить DLL из своего приложения после использования (выгрузки), а этого сделать неудается т.к. ОС недает! Как тут быть?
← →
VuDZ (2002-03-20 15:44) [7]???
Может Free Library вызывать до упора? Или чего ты хочешь?
← →
Fellomena (2002-03-20 16:41) [8]По идее, если ниодно приложение не использует более эту dll, то, даже если эта dll кэшированав память, а ты пробуешь стереть её - это должно получиться !
Но, если ты это пробуешь сделать под отладчиком (в Delphi F9), то это не получится, потому как Delphi загружает в своё адресное пространство dll, которую твоё приложение использует.
Попробуй сделать всё как делал, но не из Делфей, а уже на самом exe-шнике.
← →
Raptor (2002-03-20 17:11) [9]Если ДЛЛ больше не используется, то ее можно удалить. Соответственно если нельзя - значит она кем то еще используется. Наверное ты используешь статическое подключение, а при этом ДЛЛ остается загруженой до конца работы приложения. Попробуй использовать динамическое подключение. Или еще. Если это у тебя ДЛЛ с глобальным хуком, то она подгружается в адр. простр. всех процессов. Потому до окончания работы приложения она остается загруженой и, соответственно, не может быть удалена.
А вообще причин может быть масса. Опиши задачу поконкретнее. Тогда будем решать.
← →
Bachin (2002-03-20 21:09) [10]как ты загружаешь либу? я лично делаю так: и ни каких проблем!
{
Create IXObject from IXLibrary
}
Result := NIL;
HLibrary := GetModuleHandle( PChar(FileName) ); // if Library alredy loaded
if HLibrary = 0 then
HLibrary := LoadLibrary( PChar(FileName) ); // if Library exist
if HLibrary = 0 then
Exit;
← →
AlexSK (2002-03-21 14:20) [11]Вот первый кусок:
Dll := LoadLibrary("Midas.Dll");
RegDll := GetProcAddress(Dll, "DllRegisterServer");
RegDll;
FreeLibrary(WDll);
А вот второй:
Dll := LoadLibrary("Midas.Dll");
UnRegDll := GetProcAddress(Dll, "DllUnregisterServer");
UnRegDll;
FreeLibrary(Dll);
DeleteFile("Midas.Dll");
"Midas.Dll" - естественно везде с полным путем!
Так вот если выполняем сначала 1-ую, а потом 2-ую часть, то Длл не удаляется! А если 1-ую, выгружаем приложение, тутже загружаем снова, и выполняем 2-ую часть - удвляется!
Во как!
← →
kig (2002-03-21 16:28) [12]Если речь о inproc-серверах, попробуйте воспользуйться ф-цией
CoFreeUnusedLibrariesEx
Unloads any DLLs that are no longer in use and whose unload delay has expired.
void CoFreeUnusedLibrariesEx(
DWORD dwUnloadDelay, //The unload delay for DLLs no longer in use
DWORD dwReserved //Reserved for future use
);
Parameters
dwUnloadDelay
[in] The delay in milliseconds between the time that the DLL has stated it can be unloaded until it becomes a candidate to unload. Setting dwUnloadDelay=INFINITE uses the system default delay (10 minutes). Setting dwUnloadDelay=0 forces the unloading of any DLLs without any delay.
dwReserved
[in] Reserved for future use; must be zero
после FreeLibrary.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c