Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2014, 01:02   #1
}-Maximus-{
 
Регистрация: 24.06.2013
Сообщений: 4
По умолчанию Зависание приложения при выгрузке dll библиотеки с формой FireMonkey

Здравствуйте. Возникла следующая проблема. Создал 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)
https://cloud.mail.ru/public/863e86e...pplication.zip

Последний раз редактировалось Stilet; 14.10.2014 в 07:30.
}-Maximus-{ вне форума Ответить с цитированием
Старый 14.10.2014, 01:40   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

1. Функции создания и уничтожения формы, вынести в DPR файл, секцию Exports туда же, именовать экспортируемые функции.
2. В коде осн. приложения сделать статический импорт.
3. в OnClose формы выставить Action в caFree

Последний раз редактировалось Человек_Борща; 14.10.2014 в 01:52.
Человек_Борща вне форума Ответить с цитированием
Старый 14.10.2014, 10:25   #3
}-Maximus-{
 
Регистрация: 24.06.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
1. Функции создания и уничтожения формы, вынести в DPR файл, секцию Exports туда же, именовать экспортируемые функции.
2. В коде осн. приложения сделать статический импорт.
3. в OnClose формы выставить Action в caFree
Статическая загрузка библиотеки не устраивает, нужна именно динамическая.
}-Maximus-{ вне форума Ответить с цитированием
Старый 14.10.2014, 21:51   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
1. Функции создания и уничтожения формы, вынести в DPR файл, секцию Exports туда же, именовать экспортируемые функции.
2. В коде осн. приложения сделать статический импорт.
3. в OnClose формы выставить Action в caFree
Это тут не причем. Код посмотрел, крамолы не нашел. Странно, что зависает. Delphi с FireMonkey нет, код не собирал, так что больше не скажу.

Кнопки в правильной последовательности нажимаются?
Vapaamies вне форума Ответить с цитированием
Старый 14.10.2014, 21:57   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Статическая загрузка библиотеки не устраивает, нужна именно динамическая.
Цитата:
Это тут не причем. Код посмотрел, крамолы не нашел.
Для справки:
Код скачал, переписал, как сказал.
Все работает, ошибок больше не вылетает.
Человек_Борща вне форума Ответить с цитированием
Старый 14.10.2014, 22:12   #6
}-Maximus-{
 
Регистрация: 24.06.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Для справки:
Код скачал, переписал, как сказал.
Все работает, ошибок больше не вылетает.
Я понимаю что со статическим подключением библиотеки всё работает, но как быть, если нужно использовать только динамическое подключение?
}-Maximus-{ вне форума Ответить с цитированием
Старый 14.10.2014, 22:17   #7
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Нужно смотреть в недрах FireMonkey, искать похожие темы на форумах. Мож у него внутри какие-то дополнительные потоки создаются, например, которые потом не дают выгрузить библиотеку?
Vapaamies вне форума Ответить с цитированием
Старый 16.10.2014, 00:42   #8
}-Maximus-{
 
Регистрация: 24.06.2013
Сообщений: 4
По умолчанию

Кстати, вполне возможно что это потоки. Для эксперимента подключил библиотеку с VCL формой, в отладчике при создании формы потоки не создаются. А вот при создании FMX формы создаются и при разрушении формы не останавливаются.

}-Maximus-{ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Завершение потоков в dll при выгрузке 220Volt Общие вопросы C/C++ 7 11.02.2013 09:32
Зависание приложения при запуске Lazio Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 16.05.2011 16:58
Ошибка при создании библиотеки DLL!!! $T@LKER Общие вопросы Delphi 12 11.05.2010 21:40
Крах при выгрузке DLL prizrak1390 Общие вопросы Delphi 15 11.09.2009 19:08
создание dll при старте приложения и удаление при завершении TyoshA Общие вопросы Delphi 7 13.07.2009 13:56