![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое подключение dll. [D6, Win2k]
bloodman © (2004-07-13 19:33:00)Мне нужно подключать dll в процессе работы программы , для этоко созда класс . в кострукторе create написал
fhande:=loadlibrary(...);
if fhandle > 32 then
@proc:=GetProcAddress(fhandle,'proc');
в деструкторе destroy написал
FreeLibrary(fhandle);
inherited;
НО!На вызове freelibrary вылезает Access Violation!
Почему??
Reindeer Moss Eater (2004-07-13 19:50:00) [21]Он деструктор вызывает у несуществующего объекта.
Не может быть AV при freelibrary.
Гаврила (2004-07-13 19:50:00) [22]
> Не может быть AV при freelibrary.
> Ошибка не здесь.
Может.
Просто в деструкторе проверять FHandle на 0.
Кстати, если в конструкторе не удалось загрузить библиотеку, хорошо бы сразу исключение поднять
Семен Сорокин (2004-07-13 19:49:00) [23]bloodman © (13.07.04 19:46) [5]
вы используете в Dll-ке глобальные объекты? корректно ли они выгружаются? Что говорит отладка? Call Stack?
Reindeer Moss Eater (2004-07-13 19:49:00) [24]Не может быть AV при freelibrary.
Ошибка не здесь.
bloodman (2004-07-13 19:48:00) [25]Reindeer Moss Eater © (13.07.04 19:46) [6]
Если поменять inherited c freelibrary , то ошибка появляется именно на freelibrary.
Тимохов (2004-07-13 19:47:00) [26]
> bloodman © (13.07.04 19:44) [4]
сслылка не открывается - ну и ладно.
что бы там не было написано - фигня.
вот описание из msdn функции loadlibrary
Return Value
If the function succeeds, the return value is a handle to the module.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
им и надо руководствоваться.
> При ошибке загрузкb процедуры выгружается библиотека??
нет - просто GetProcAddress не возвращает адрес.
Reindeer Moss Eater (2004-07-13 19:46:00) [27]Не может быть AV при freelibrary.
Ошибка не здесь.
bloodman (2004-07-13 19:46:00) [28]>Семен Сорокин © (13.07.04 19:40) [3]
Со статической привязкой работает нормально.
Там нет 1 процедуры , которая загружается.
теперь у меня 1 вопрос:
При ошибке загрузки процедуры выгружается библиотека??
bloodman (2004-07-13 19:44:00) [29]>Тимохов © (13.07.04 19:35) [1]
>и почему > 32?
http://delphiworld.narod.ru/base/dynamic_use_dll.html
>потому, что процедура не найдена, а вы не проверяете результат работы GetProcAddress.
При ошибке загрузкb процедуры выгружается библиотека??
Семен Сорокин (2004-07-13 19:40:00) [30]может быть еще и в самой библиотеке в DllEntryPoint.
Reindeer Moss Eater (2004-07-13 19:37:00) [31]НО!На вызове freelibrary вылезает Access Violation!
Почему??
Потому что не на вызове FreeLibrary возникает Access Violation.
Тимохов (2004-07-13 19:35:00) [32]
> НО!На вызове freelibrary вылезает Access Violation!
потому, что процедура не найдена, а вы не проверяете результат работы GetProcAddress.
и почему > 32?