Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
3-25244
yorik
2003-12-10 23:08
2004.01.09
dbf для Excel


4-25658
kryn
2003-11-06 10:48
2004.01.09
как при помощи DELPHI удалить папку вместе с файлами?


1-25430
NneRreaLl
2003-12-23 19:50
2004.01.09
Насчёт Memo -- можно ли ?


1-25393
Sasha_M
2003-12-24 19:30
2004.01.09
Как в Tlistview при нажатии клавиши отметить выбранный


14-25512
Думкин
2003-12-16 07:03
2004.01.09
С днем рождения! 16 декабря.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский