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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 11:56   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Закрыть программу из DLL

К моему проекту привязана DLL
Код:
procedure UpdateProgram(URL, Path, UpdateProgramName, ArchiveName: PChar); stdcall; external 'MYDLL.DLL';
Эта DLL скачивает файл из Инета. После того как программа скачала архив нужно завершить работу приложения. Я работаю с DLL в первые.
Код:
procedure TFormUpdate.thrTerminate(Sender: TObject);
begin
  FormUpdate.Close; // Форма, вызванная из DLL не закрывается вообще
  FormMain.PMMExit.Click; // Полнейший бред
end;
...

// FormMain
procedure TFormMain.Exit1Click(Sender: TObject);
begin
  Application.Terminate;
end;
Как закрыть форму, вызванную из DLL и правильно завершить работу программы всё из той же DLL?

Последний раз редактировалось Shouldercannon; 17.05.2011 в 12:46.
Shouldercannon вне форума Ответить с цитированием
Старый 17.05.2011, 16:28   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Если закрыть саму программу, то и DLL автоматически выгрузится, т.к. работают они в одном потоке. Отсюда смысла нет закрывать саму программу.
З.Ы. Updater лучше делать отдельным EXE файлом, либо пусть будет DLL, но вызов например этой DLL будет не из главной программы, а из C:\WINDOWS\system32\rundll32.exe
Тогда в коде DLL просто ищем окно Вашей программы и посылаем ей сообщение WM_CLOSE.

Последний раз редактировалось FaTaL; 17.05.2011 в 16:31.
FaTaL вне форума Ответить с цитированием
Старый 17.05.2011, 17:49   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Если закрыть саму программу, то и DLL автоматически выгрузится, т.к. работают они в одном потоке. Отсюда смысла нет закрывать саму программу.
З.Ы. Updater лучше делать отдельным EXE файлом, либо пусть будет DLL, но вызов например этой DLL будет не из главной программы, а из C:\WINDOWS\system32\rundll32.exe
Тогда в коде DLL просто ищем окно Вашей программы и посылаем ей сообщение WM_CLOSE.
Updater и так является отдельным приложением. Попробую после закачки файла моей DLL, послать главному окну приложения команду на закрытие.
Shouldercannon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Закрыть активную программу Михаил Юрьевич Общие вопросы Delphi 6 15.01.2010 08:15
Закрыть программу на C# Olaf Общие вопросы C/C++ 3 14.12.2009 13:03
Закрыть другую программу Shouldercannon Win Api 4 20.12.2008 20:50
закрыть программу Var17 Общие вопросы Delphi 1 20.12.2007 10:06
как закрыть программу? Alar Общие вопросы Delphi 0 29.10.2006 20:22