![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| FShadow |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.12.2006 Где: Беларусь, г. Минс к Репутация: -1 Всего: -1 |
Ув. программисты помогите.
Есть такой код динамаческой загрузки dll. Метод загрузки вроде как везде описывают.
При его выполнении происходит ошибка. Привожу Event Log
Я так понимаю dll выгрузилась успешно тогда в чем проблема? Если dll грузится статически то ошибки нет и все работает нормально. Помогите разобраться в чем ошибка? |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Скорее всего неправильная работа с памятью в Dll, AV это крах программы. Вариантов может быть много, самый вероятный, то что при передаче данных использовалась память выделенная в куче, но у Dll и программы разные менеджеры памяти. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Есть подозрение на проблему с функцией... Насколько я понял из когда, ты получаешь адрес на функцию из ДЛЛ, потом его используешь, а потом очищаешь ДЛЛ хандл... МОжет попробовать чтото проде GetListDB:=nil; перед FreeLibrary...
|
|||
|
||||
| FShadow |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.12.2006 Где: Беларусь, г. Минс к Репутация: -1 Всего: -1 |
Так и есть. Я так понял что результат операции ListDB1 := GetListDB(pathApp); находится в адресном пространстве dll а после FreeLibrary в переменной ListDB1 все значения обнуляются. Отсюда вопрос: Как изменить код чтоб этого не происходило. Для справки TListDBrec это запись может это важно. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Есть модуль FastShareMem это не родной, но зато не требует сторонней Dll. Его нужно прописать 1м в проге и Dll тогда при выделении памяти в Dll он будет выделяться в менеджере кучи программы. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| DragonFire |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 14.8.2005 Где: Москва Репутация: нет Всего: 9 |
Поидее если у тебя ListDB1 объявлена тут же (а не в ДЛЛ) то никакие значения обнулятся не должны. А вот обнулять указатель на функцию перед FreeLibrary нужно. |
|||
|
||||
| FShadow |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 8.12.2006 Где: Беларусь, г. Минс к Репутация: -1 Всего: -1 |
Спасибо за модуль FastShareMem. Помог. Только надо освободить библиотеку до использования ListDB1. Если после то возникают проблемы. Присвоенное значение заполняется непонятно чем или обнуляется.
Тип объявлен тут же, но честно сказать никаких изменений после добавления строки GetListDB:=nil; не наблюдал. Спасибо всем за помощь! |
||||||
|
|||||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Важно, чтобы не было обращения к функциям Dll после ее удаления. Кроме того данные может уничтожить владелец. Могло получиться так что владельцем был объект из Dll, который автоматически уничтожается по выходу и уничтожает своих детей. Например Application/mouse/Screen и т.д. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |