Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Динамическое подключение dll. [D6, Win2k]


Страницы:   1 2

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?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо