Главная страница
    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.012 c
3-25243
ss300
2003-12-10 16:24
2004.01.09
ZeosDB


3-25217
k_len
2003-12-11 14:35
2004.01.09
Создавать таблицы или нет


1-25343
velial
2003-12-22 11:59
2004.01.09
Delphi && Excel Replace


1-25367
sanilo
2003-12-25 16:42
2004.01.09
Windows XP & Shell


1-25279
Zamik
2003-12-22 12:19
2004.01.09
Поиск файла по расширению





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