Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

Обязательно ли вызывать FreeLibrary?   Найти похожие ветки 

 
Fay ©   (2005-11-02 09:27) [0]

В одном из модулей в initialization вызывается LoadLibrary для некоторой DLL.
Можно ли обойтись без FreeLibrary в finalization?
Уменьшится ли "DLL reference count" просто из-за завершения процесса?


 
Slym ©   (2005-11-02 09:39) [1]

Уменьшит при закрытии...
А если это динамически загружаемый модуль, (bpl,dll) то лучше всетаки вызывать FreeLibrary


 
Digitman ©   (2005-11-02 09:44) [2]


> Можно ли обойтись без FreeLibrary в finalization?


можно


> Уменьшится ли "DLL reference count" просто из-за завершения
> процесса?


да


 
GuAV ©   (2005-11-02 10:01) [3]

Fay ©   (02.11.05 9:27)
Можно ли обойтись без FreeLibrary в finalization?


Можно. Как и оставить незакрытый хендл (файла) - он всё равно закроется или выделенную и не освобождённую память - она всё равно будет освобождена при выгрузке процесса.


 
evvcom ©   (2005-11-02 10:40) [4]

+ к "можно" и "да": Но это дурной тон в программировании. Об этом, кстати, сообщит MemProof.


 
Digitman ©   (2005-11-02 10:46) [5]


> evvcom ©   (02.11.05 10:40) [4]


на камень в мой огород скажу - да, лучше явно выполнять FreeLibrary() ..


 
evvcom ©   (2005-11-02 10:57) [6]


> на камень в мой огород

не... не камень. Просто дополнение для Fay, чтобы не расслаблялся.


 
Fay ©   (2005-11-02 12:31) [7]

Спасибо всем за ответы!

2 Digitman ©   (02.11.05 10:46) [5]
2 evvcom ©   (02.11.05 10:40) [4]
2 evvcom ©   (02.11.05 10:57) [6]

Дело в том, что у меня используется чужой модуль для работы с HTML-Help, в котором как раз такой код встречается - LoadLibrary в initialization и FreeLibrary в finalization.
Так вот при закрытии программы часто (на одном из компов почти всегда, на моём очень редко) вызазит AV. Убрал FreeLibrary - галюн исчез.
Вот я и решил спросить про енто дело.


 
Digitman ©   (2005-11-02 12:42) [8]


> Fay ©   (02.11.05 12:31) [7]


а мысли про вполне вероятную "глючность" этого самого "чужого модуля" при этом не возникло ?


 
Fay ©   (2005-11-02 12:45) [9]

2 Digitman ©   (02.11.05 12:42) [8]
Других глюков там нет, да и не могёт быть - это просто интерфейс к API.
У вас есть конкретные подозрения?


 
Digitman ©   (2005-11-02 13:14) [10]


> Fay ©   (02.11.05 12:45) [9]


> да и не могёт быть - это просто интерфейс к API


"наглюкавить" при желании можно где угодно)


> У вас есть конкретные подозрения?


откуда ж они возьмутся ?

я понятия не имею, о какой конкретно библ-ке идет речь ...

могу лишь сказать, что если она действительно "глюкавая", то тот же глюк, по идее, должен выплыть и при вне блоков init/final ... с учетом того что между загрузкой и выгрузкой ты более нигде и никак не обращаешься к библ-ке


 
Leonid Troyanovsky ©   (2005-11-02 13:16) [11]


> Fay ©   (02.11.05 12:45) [9]
> 2 Digitman ©   (02.11.05 12:42) [8]
> Других глюков там нет, да и не могёт быть - это просто интерфейс
> к API.
> У вас есть конкретные подозрения?


У меня есть.
Это, видимо, объектный интерфейс (а иначе зачем).
Сл-но, глюки есть.

--
Regards, LVT.


 
Fay ©   (2005-11-02 13:48) [12]

2 Leonid Troyanovsky ©   (02.11.05 13:16) [11]
Я взял на себя смелость отправить Вам 2 исп. модуля.
Вы, думаю, сможете сразу оценить их "объектность", и м.б. скажете в чём ошибка.

З.Ы.
Я сейчас использую только 1 функцию - HtmlHelpA.


 
Leonid Troyanovsky ©   (2005-11-02 14:11) [13]


> Fay ©   (02.11.05 13:48) [12]
> 2 Leonid Troyanovsky ©   (02.11.05 13:16) [11]
> Я взял на себя смелость отправить Вам 2 исп. модуля.


И чем я провинился?
IMHO, это support@helpware.net

В качестве рабочей гипотезы - некорректная работа со строками.

--
Regards, LVT.


 
Fay ©   (2005-11-02 14:16) [14]

2 Leonid Troyanovsky ©   (02.11.05 14:11) [13]
>> некорректная работа со строками
Это как?


 
Leonid Troyanovsky ©   (2005-11-02 14:58) [15]


> Fay ©   (02.11.05 14:16) [14]
> 2 Leonid Troyanovsky ©   (02.11.05 14:11) [13]
> >> некорректная работа со строками
> Это как?


Ну, например, в длине буфера ошиблись.

--
Regards, LVT.


 
Fay ©   (2005-11-02 15:06) [16]

2 Leonid Troyanovsky ©   (02.11.05 14:58) [15]
Не, я таких мест не нашёл.


 
Leonid Troyanovsky ©   (2005-11-02 15:24) [17]


> Fay ©   (02.11.05 15:06) [16]
> 2 Leonid Troyanovsky ©   (02.11.05 14:58) [15]
> Не, я таких мест не нашёл.


Ну, может, порядок финализации библиотеки требуется другой,
или там работают дополнительные потоки (как в common dialogs).
А раз так, и нет планов на динамическую загрузку,
то на собс-ручный FreeLibrary можно смело плюнуть.

--
Regards, LVT.


 
Fay ©   (2005-11-02 15:28) [18]

2 Leonid Troyanovsky ©   (02.11.05 15:24) [17]
>> FreeLibrary можно смело плюнуть.
Я так и сделал, просто хотел выяснить, что это не есть жуткий криминал...


 
DiamondShark ©   (2005-11-02 16:57) [19]


> Fay ©   (02.11.05 14:16) [14]
> 2 Leonid Troyanovsky ©   (02.11.05 14:11) [13]
> >> некорректная работа со строками
> Это как?

Некогда, не очень давно, был тут пример с возвращением константной строки и последующим FreeLibrary.

Примерно такое:

-- длл --
function Foo: string;
begin
 Result := "Haligali balalaika";
end;

exports Foo;
--------

Последовательность кода вроде

LoadLibrary(...);
Bar := Foo;
FreeLibrary(...);
Bar := "";

Приводит к AV.
Надеюсь, понятно почему...


 
DiamondShark ©   (2005-11-02 17:07) [20]


> DiamondShark ©   (02.11.05 16:57) [19]

Но тут, наверное, не тот случай.
ДЛЛ ведь не дельфийская?

Тогда такой вариант.
Модуль возвращает ссылку на какие-то данные из длл, эта ссылка сохраняется и используется в каком-то модуле, финализация которого происходит позже выгрузки ДЛЛ.


 
Fay ©   (2005-11-02 18:17) [21]

>> Модуль возвращает ссылку на какие-то данные из длл
Пока не нашёл такого ...


 
evvcom ©   (2005-11-02 23:12) [22]

Fay, ты прям какой-то партизан или ты у Пельша учился? Устроил нам тут угадайку. Хоть бы чуть больше осветил, что за модули такие.
Я как-то перехватывал API-вызовы своей dll, которую "чужой" exe сам грузил (даже внедрять не надо было :) ) Ну так раз в нем была задумана загрузка плагина, то естественно была и выгрузка. Вот на этой выгрузке я и получал AV. А все просто оказалось. Приложение было Сишное, оно создавало отдельный поток, читало адрес перехватываемой мною функции, сохраняло его в регистре, и поток крутился в цикле, не меняя этот регистр, и время от времени делая jmp <регистр>. Да... Дельфовый компилятор так не компилит. Естественно после FreeLibrary этот jmp и вызывал AV. Так и пришлось перехватывать еще и FreeLibrary, чтобы добиться "плохого тона в программировании" :)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.029 c
11-1107971012
Лёля
2005-02-09 20:43
2005.11.27
Пример для KOLWord


2-1131732106
ANSH
2005-11-11 21:01
2005.11.27
программа с элементами webbrowzer-a


6-1124018204
NikNet
2005-08-14 15:16
2005.11.27
Как сделать CHAT к внешнему WEB-Чату?


14-1131510557
DelphiN!
2005-11-09 07:29
2005.11.27
Отказ от курения, раздражительность


2-1131712228
Andrewmx
2005-11-11 15:30
2005.11.27
Как найти минимальный элемент в двумерном массиве?





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