Начало » Программирование » Delphi » Использование форм в DLL (Корректный вызов формы и освобождение памяти при закрытии)
Использование форм в DLL [сообщение #3189] |
Wed, 27 September 2023 17:00 |
LeGO
Сообщений: 4 Зарегистрирован: September 2023
|
Junior Member |
|
|
Всем привет, не ругайтесь, но мы используем формы в dll :d .
В общем и целом момент такой:
Разрабатываем приложение MDI, дочерние окна(модули) которой содержаться в dll. При нажатии кнопки меню в главном окне соответственно вызывается нужный модуль с формой. Обновление этих dll (если что-то в проекте поменяли), происходит в момент запуска программы (сравниваются версии dll на пользовательском ПК и сервере и, если есть различие, заменяются более свежими). Стоит задача проверять наличие более новой версии dll не только при запуске программы, но и в момент ее работы, при вызове этой dll по нажатию кнопки в меню. Сделали, но есть момент: обновление проходит нормально только если dll с формой до этого ни разу не вызывалась в рамках текущего запуска основной формы. Если же dll хоть раз вызвали, при замене файла - ошибка 5 "Отказано в доступе". В ручную тоже не дает удалять - "Файл занят основным приложением".
Накидал тестовый проект с вызовом dll. В самой dll - Форма пустая и одна экспортируемая функция(просто возвращает рандомное число). В основном проекте две кнопки, одна вызывает функцию из этой dll, вторая показывает из нее же форму. Ок, запускаем: при вызове просто функции (программу не закрываем), она отрабатывает, и есть возможность dll удалить вручную. При нажатии на вторую кнопку показываем форму из dll, закрываем ее, и... не можем удалить файл dll. Занят. Чем, не понятно. Freelibrary, CloseHandle, TerminateProcess не помогают. Может кто сталкивался с таким? Что может держать dll и как с этим бороться?
С уважением, LeGO
|
|
|
Переход к форуму:
Текущее время: Thu Dec 19 12:33:50 GMT+3 2024
Общее время, затраченное на создание страницы: 0.00946 секунд
|