Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
ВнизFreeLibrary Найти похожие ветки
← →
TUser (2003-12-25 14:36) [0]Достаточно ли FreeLibrary для того, чтобы убить копию dll из пямяти. Проблема такая - к программе подключается несколько модулей, которые можно выгрузить и вместо них загрузить другой модуль (dll). Так вот, этот новый модель номально загружается, но через несколкьо секунд работы выскакивает AV. Это не завыисит от того, какой модуль подгружаем по умолчанию при запуске программы - первый модель всегда работает правильно.
При повторной загрузке делаю динамическую загрузку, вроде все правильно
FreeLibrary(lib);
lib:=LoadLibrary(...);
if lib<>0 then begin
@firstproc:=GetProcAddress(...);
@secondproc:=GetProcAddress(...);
firstpros; secondproc;
end;
← →
Skier (2003-12-25 14:54) [1]lib:=LoadLibrary(...);
if lib<>0 then begin
@firstproc:=GetProcAddress(...);
@secondproc:=GetProcAddress(...);
firstpros; secondproc;
end;
FreeLibrary(lib);
> Достаточно ли FreeLibrary для того, чтобы убить копию dll
> из пямяти
DLL "убъётся" когда будет вызван последний FreeLibrary и кол-во ссылок будет = 0
← →
Skier (2003-12-25 14:55) [2]Да ! И try-блок конечно нужно использовать в таких случаях...
← →
TUser (2003-12-25 14:57) [3]FreeLibrary в самом начале - это правильно. У меня уже загружена библиотека, я ее выгружаю и вместо нее гружу новую. Этот FreeLibrary как раз и будет последним, т.к. больше мою библиотеку никакая прога не использует.
И при этом возникает глюк.
← →
Skier (2003-12-25 15:01) [4]
> FreeLibrary в самом начале - это правильно.
НЕТ !
← →
TUser (2003-12-25 15:07) [5]Как не правильно? Мне надо сначала выгрузить одну библиотеку, а потом уже грузить другую.
← →
Skier (2003-12-25 15:11) [6]>TUser © (25.12.03 15:07) [5]
Если всё проиходит в одном приложении, то вообще непонятно зачем
грузить библиотеку два раза ! Грузишь один раз, а дальше просто используешь handle загруженной библиотеки - и всё !
← →
TUser (2003-12-25 15:31) [7]Грузить ее 2 раза - потому что это 2 разные библиотеки. Сначала используем одну, потом другую. Они имеют одни и те же функции, но выполняют их несколько по-разному. Поэтому для перехода от одного режима работы к другому надо одну библиотеку выгрузить, а вторую загрузить.
Кстати, если убрать FreeLibrary, то глюк остается.
← →
Skier (2003-12-25 15:41) [8]Что-то начинаю ощущать что проблема не в паре LoadLibrary - FreeLibrary, а где-то в другом месте...
← →
TUser (2003-12-25 15:42) [9]dll написаны вроде правильно. По крайней мере, та, которая грузится самой первой работает нормально, вне зависимости от того, кого мы именно будем первым грузить.
Спасибо, буду копать.
← →
Zz_ (2003-12-25 15:44) [10]Грузи сразу обе а потом указателями меняйся
← →
TUser (2003-12-25 15:49) [11]Их пока 2, но будет больше. И сделано так для дальнейшего развития проги - прога сама найдет в определенной папке нужные ей библиотеки и будет их загружать, когда потребуется. Так что загрузить их сразу нельзя, просто потому, что я не знаю, что конкретно придется грузить. Да и памяти жалко.
← →
Skier (2003-12-25 15:53) [12]Упрости вызываемые ф-ции в библиотеках до невозможность и проверь - действительно ли проблема в паре LoadLibrary - FreeLibrary...
← →
Бином Ньютоныч (2003-12-25 18:48) [13]А первая как загружается?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c