![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
MaximusVRN |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Здравствуйте. Возникла следующая проблема. Создал dll библиотеку с формой FireMonkey. Из приложения на VCL подключаю библиотеку, вызываю функцию создания формы
форма создаётся, далее вызываю функцию закрытия и уничтожения формы FM
Но при попытке выгрузить dll приложение зависает.
Возможно уничтожение формы FM как-то отличается от VCL и нужно что-то вызвать ещё кроме FreeAndNil или проблема в другом? (dll и приложение написаны в Delphi XE6) |
||||||
|
|||||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
Просто как предположение, т.к. с FM не имею опыта:
В делфи лучше не делать free форме (TCustomForm), лучше вызывать Release, который безопасно удалит форму, а с FreeAndNil могут быть проблемы, но не знаю на счёт FM. Добавлено через 57 секунд Да, и с делизом в делфи посылается сообщение, которое потом удалит форму, т.е. асинхронно, может быть в FM тоже это асинхронно и нельзя сразу выгружать библиотеку. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
MaximusVRN |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Release не помог. Подождал минут 5 после уничтожения и всё равно приложение зависает. |
||||
|
|||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Мне кажется вы не там ищете.
Что из сторонних компонентов вы используете? Есть например приколы с gdi, в библиотеках нужно принудительно вызывать инициализацию и потом финализацию в противном случае тоже будет подвисать. Этот ответ добавлен с нового Винграда - http://vingrad.com |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
А если у вас приложение стабильно зависает - сделайте остановку в отладчике, перейдите на вкладку "Threads" и посмотрите чего оно ждёт - может там будет виден дедлок.
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
MaximusVRN |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Из сторонних компонентов - ничего. Здесь вообще чистая форма FMX. Инициализацию и финализацию чего? Добавлено через 1 минуту и 33 секунды
Сделал остановку, на вкладке следующее. ![]() |
||||
|
|||||
MaximusVRN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Собственно вот они два потока.
4324 ждёт 5492, а 5492 ждёт 4324. Только я не представляю как можно это самим исправить. ![]() |
|||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
А колстеков для этих потоков нету? Они бы и помогли (разумеется, с отладочной информацией). Добавлено через 3 минуты и 50 секунд Да и у вас всё висит по одному адресу $77BEF8D1 - посмотрите в отладке, что это за код. -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
MaximusVRN |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Адрес $77BEF8D1 ![]() Коллстек основного потока, как я понял. ![]() И коллстек второго потока. ![]() |
||||
|
|||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
||||
|
||||
MaximusVRN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
||||
|
||||
Illusion Dolphin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 36 Всего: 63 |
В колстеке значится d3d11 + nvwgf2um - значит не всё, что связано с DirectX уничтожено на форме, имхо. А форма пустая или нет? Пробовали с пустым приложением и пустой формой в dll?
-------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
Ну у кого как. У меня VCL пустая форма, правда на билдере написанная, но думаю это не суть, при выгрузке dll из памяти что-то рушит в памяти основного процесса. Приложение через некоторое время крешится в произвольное время в произвольном месте. Имею 3 совершенно разных плагина, один из которых написан не мной и во всех случаях поведение идентичное. После выгрузки плагина с VCL формой, через некоторое время, иногда даже минут через 5 креш основного приложения. Плагины написанные на Visual Studio с Windows Dialogs формами выгружаются сколько угодно раз безо всяких вопросов. Мое мнение такое, что размещение форм в Dll без использования общего модуля forms (для приложения и dll) является своего рода хаком. По симптомам именно Finalization блок модуля Forms что-то завершает, что не позволяет потом нормально работать дальше приложению. Не знаю поможет ли это вам, ведь в FMX модуль Forms наверняка иной нежели в VCL. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
MaximusVRN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.5.2014 Репутация: нет Всего: нет |
Форма абсолютно пустая. Видимо для отрисовки самой формы используется DirectX. Что значит с пустым приложением? Я пробовал не создавать форму, просто загружать библиотеку и выгружать - всё прекрасно. Проблема именно в форме, а точнее с её уничтожением. Добавлено через 4 минуты и 55 секунд Мной написан уже не один плагин с формами в dll для одной программы, да и не только мной. Всё прекрасно выгружается сколь угодно раз, причём формы не пустые. Но сейчас потребовалась графика чуть посложнее, которую на FMX сделать будет легче. |
|||
|
||||
DarkProg |
|
|||
![]() Законченный романтик ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1784 Регистрация: 11.3.2009 Где: Земля Репутация: 2 Всего: 19 |
Ну собственно теперь становится понятнее откуда ноги растут у проблемы.
А вообще лёгкий гуглинг приводит вот к такой любопытной статье Все ли требования соблюдены у вас, потому что исходников у нас нет? -------------------- "И твоя голова всегда в ответе за то куда сядет твой зад..." "Я студент - скажите с какого я ВУЗа..." ![]() ![]() ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |