Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.09;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
11-25272
vostrjakov
2003-04-17 15:41
2004.01.09
перехват приложением сообщения WM_COPYDATA в KOL


3-25235
zzzrrv
2003-12-10 12:12
2004.01.09
Отчет


14-25513
Stilgar
2003-12-15 20:17
2004.01.09
Чем Windows 2000 лучше XP?


14-25592
Юрий Федоров
2003-12-17 17:26
2004.01.09
Спам


4-25664
Dmitry___
2003-11-02 18:10
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский