Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Зависание приложения при выгрузке dll библиотеки с 
:(
    Опции темы
MaximusVRN
Дата 13.10.2014, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Здравствуйте. Возникла следующая проблема. Создал dll библиотеку с формой FireMonkey. Из приложения на VCL подключаю библиотеку, вызываю функцию создания формы

Код

procedure CreateHD;
begin
  FormHD := TFormHD.Create(nil);
  FormHD.Caption := 'HD';
  FormHD.Show;
end;


форма создаётся, далее вызываю функцию закрытия и уничтожения формы FM

Код

procedure CloseHD;
begin
  FormHD.Close;
  FreeAndNil(FormHD);
end;

Но при попытке выгрузить dll приложение зависает.
Код

FreeLibrary(HLib);

 

Возможно уничтожение формы FM как-то отличается от VCL и нужно что-то вызвать ещё кроме FreeAndNil или проблема в другом?

 
(dll и приложение написаны в Delphi XE6)

PM MAIL   Вверх
Illusion Dolphin
Дата 14.10.2014, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Просто как предположение, т.к. с FM не имею опыта:
Код

begin
  FormHD.Close;
  FreeAndNil(FormHD); //<--- очень спорная строчка
end;


В делфи лучше не делать free форме (TCustomForm), лучше вызывать Release, который безопасно удалит форму, а с FreeAndNil могут быть проблемы, но не знаю на счёт FM.

Добавлено через 57 секунд
Да, и с делизом в делфи посылается сообщение, которое потом удалит форму, т.е. асинхронно, может быть в FM тоже это асинхронно и нельзя сразу выгружать библиотеку.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MaximusVRN
Дата 14.10.2014, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 14.10.2014,  21:04)
Просто как предположение, т.к. с FM не имею опыта:
Код

begin
  FormHD.Close;
  FreeAndNil(FormHD); //<--- очень спорная строчка
end;


В делфи лучше не делать free форме (TCustomForm), лучше вызывать Release, который безопасно удалит форму, а с FreeAndNil могут быть проблемы, но не знаю на счёт FM.

Добавлено @ 21:05
Да, и с делизом в делфи посылается сообщение, которое потом удалит форму, т.е. асинхронно, может быть в FM тоже это асинхронно и нельзя сразу выгружать библиотеку.

Release не помог. Подождал минут 5 после уничтожения и всё равно приложение зависает.
PM MAIL   Вверх
DarkProg
Дата 17.10.2014, 11:11 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Мне кажется вы не там ищете.

Что из сторонних компонентов вы используете?

Есть например приколы с gdi, в библиотеках нужно принудительно вызывать инициализацию и потом финализацию в противном случае тоже будет подвисать.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Illusion Dolphin
Дата 17.10.2014, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



А если у вас приложение стабильно зависает - сделайте остановку в отладчике, перейдите на вкладку "Threads" и посмотрите чего оно ждёт - может там будет виден дедлок. 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MaximusVRN
Дата 18.10.2014, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Цитата(DarkProg @ 17.10.2014,  11:11)
Мне кажется вы не там ищете.

Что из сторонних компонентов вы используете?

Есть например приколы с gdi, в библиотеках нужно принудительно вызывать инициализацию и потом финализацию в противном случае тоже будет подвисать.

Этот ответ добавлен с нового Винграда - http://vingrad.com

Из сторонних компонентов - ничего. Здесь вообще чистая форма FMX. Инициализацию и финализацию чего?

Добавлено через 1 минуту и 33 секунды
Цитата(Illusion Dolphin @ 17.10.2014,  12:21)
А если у вас приложение стабильно зависает - сделайте остановку в отладчике, перейдите на вкладку "Threads" и посмотрите чего оно ждёт - может там будет виден дедлок.

Сделал остановку, на вкладке следующее.

user posted image
PM MAIL   Вверх
MaximusVRN
Дата 18.10.2014, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Собственно вот они два потока.
4324 ждёт 5492, а 5492 ждёт 4324. Только я не представляю как можно это самим исправить.
user posted image
PM MAIL   Вверх
Illusion Dolphin
Дата 18.10.2014, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



Цитата

Только я не представляю как можно это самим исправить.

А колстеков для этих потоков нету? Они бы и помогли (разумеется, с отладочной информацией).

Добавлено через 3 минуты и 50 секунд
Да и у вас всё висит по одному адресу $77BEF8D1 - посмотрите в отладке, что это за код.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
MaximusVRN
Дата 18.10.2014, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 18.10.2014,  13:20)
Цитата

Только я не представляю как можно это самим исправить.

А колстеков для этих потоков нету? Они бы и помогли (разумеется, с отладочной информацией).

Добавлено @ 13:24
Да и у вас всё висит по одному адресу $77BEF8D1 - посмотрите в отладке, что это за код.

Адрес $77BEF8D1
user posted image 
Коллстек основного потока, как я понял.
user posted image 
И коллстек второго потока.
user posted image
PM MAIL   Вверх
kami
Дата 18.10.2014, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 23
Всего: 72



Цитата(MaximusVRN @  13.10.2014,  23:47 Найти цитируемый пост)
Создал dll библиотеку с формой FireMonkey.

Имхо, проблема именно в том, что форма в dll. Даже с учетом огненной обезьяны
PM MAIL WWW   Вверх
MaximusVRN
Дата 18.10.2014, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Цитата(kami @ 18.10.2014,  18:39)
Цитата(MaximusVRN @  13.10.2014,  23:47 Найти цитируемый пост)
Создал dll библиотеку с формой FireMonkey.

Имхо, проблема именно в том, что форма в dll. Даже с учетом огненной обезьяны

Само собой, но VCL форма прекрасно работает в dll, чем тогда FMX хуже  smile 
PM MAIL   Вверх
Illusion Dolphin
Дата 19.10.2014, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 36
Всего: 63



В колстеке значится d3d11 + nvwgf2um - значит не всё, что связано с DirectX уничтожено на форме, имхо. А форма пустая или нет? Пробовали с пустым приложением и пустой формой в dll?


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 19.10.2014, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(MaximusVRN @  18.10.2014,  21:02 Найти цитируемый пост)
Само собой, но VCL форма прекрасно работает в dll, чем тогда FMX хуже

  Ну у кого как. У меня VCL пустая форма, правда на билдере написанная, но думаю это не суть, при выгрузке dll из памяти что-то рушит в памяти основного процесса. Приложение через некоторое время крешится в произвольное время в произвольном месте. Имею 3 совершенно разных плагина, один из которых написан не мной и во всех случаях поведение идентичное. После выгрузки плагина с VCL формой, через некоторое время, иногда даже минут через 5 креш основного приложения. Плагины написанные на Visual Studio с Windows Dialogs формами выгружаются сколько угодно раз безо всяких вопросов.
  
  Мое мнение такое, что размещение форм в Dll без использования общего модуля forms (для приложения и dll) является своего рода хаком. По симптомам именно Finalization блок модуля Forms что-то завершает, что не позволяет потом нормально работать дальше приложению. Не знаю поможет ли это вам, ведь в FMX модуль Forms наверняка иной нежели в VCL.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MaximusVRN
Дата 19.10.2014, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.5.2014

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 19.10.2014,  11:29)
В колстеке значится d3d11 + nvwgf2um - значит не всё, что связано с DirectX уничтожено на форме, имхо. А форма пустая или нет? Пробовали с пустым приложением и пустой формой в dll?

Форма абсолютно пустая. Видимо для отрисовки самой формы используется DirectX. Что значит с пустым приложением? Я пробовал не создавать форму, просто загружать библиотеку и выгружать - всё прекрасно. Проблема именно в форме, а точнее с её уничтожением.

Добавлено через 4 минуты и 55 секунд
Цитата(Alexeis @ 19.10.2014,  13:26)
Цитата(MaximusVRN @  18.10.2014,  21:02 Найти цитируемый пост)
Само собой, но VCL форма прекрасно работает в dll, чем тогда FMX хуже

  Ну у кого как. У меня VCL пустая форма, правда на билдере написанная, но думаю это не суть, при выгрузке dll из памяти что-то рушит в памяти основного процесса. Приложение через некоторое время крешится в произвольное время в произвольном месте. Имею 3 совершенно разных плагина, один из которых написан не мной и во всех случаях поведение идентичное. После выгрузки плагина с VCL формой, через некоторое время, иногда даже минут через 5 креш основного приложения. Плагины написанные на Visual Studio с Windows Dialogs формами выгружаются сколько угодно раз безо всяких вопросов.
  
  Мое мнение такое, что размещение форм в Dll без использования общего модуля forms (для приложения и dll) является своего рода хаком. По симптомам именно Finalization блок модуля Forms что-то завершает, что не позволяет потом нормально работать дальше приложению. Не знаю поможет ли это вам, ведь в FMX модуль Forms наверняка иной нежели в VCL.

Мной написан уже не один плагин с формами в dll для одной программы, да и не только мной. Всё прекрасно выгружается сколь угодно раз, причём формы не пустые. Но сейчас потребовалась графика чуть посложнее, которую на FMX сделать будет легче.
PM MAIL   Вверх
DarkProg
Дата 20.10.2014, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Законченный романтик
***


Профиль
Группа: Завсегдатай
Сообщений: 1784
Регистрация: 11.3.2009
Где: Земля

Репутация: 2
Всего: 19



Ну собственно теперь становится понятнее откуда ноги растут у проблемы.

А вообще лёгкий гуглинг приводит вот к такой любопытной статье 
Все ли требования соблюдены у вас, потому что исходников у нас нет?


--------------------
"И твоя голова всегда в ответе за то куда сядет твой зад..."

"Я студент - скажите с какого я ВУЗа..."

 smile  smile  smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1361 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.