Главная страница
    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.01 c
7-25630
INTAARI
2003-10-29 11:39
2004.01.09
ReadFile не удается прочитать весь массив данных


14-25518
McSimm
2003-12-12 10:48
2004.01.09
Наш самолет на запасном пути? :)


14-25566
Knight
2003-12-17 11:21
2004.01.09
Поделитесь примером использования функции


1-25440
del_programmer
2003-12-23 17:42
2004.01.09
skin


3-25253
ShadowSmart
2003-12-10 14:22
2004.01.09
Сжатие *.mdb через ADO





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский