Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.26;
Скачать: CL | DM;

Вниз

Форма в DLL   Найти похожие ветки 

 
Tornado ©   (2004-12-09 13:32) [0]

Есть у меня форма в DLL. Я вызываю ее из основной проги:

.....
.....
if @CreateMyForm <> nil then
   CreateMyForm(Application.Handle);

Появляется эта форма, на ней есть кнопка "Закрыть", нажимаем, форма закрывается, все ОК. Вопрос надо ли освобождать как-то (простите за возможно непрвильные формулировки, с DLL можно сказать впервые работать пытаюсь) ресурсы : FreeLibrary(LibHandle) и где это нужно написать если да.


 
cheloveck   (2004-12-09 13:48) [1]

А какая разница что ты вызываешь из dll?
Если ты подключил к адресному приложению dll, то и отключать ты должен.


 
cheloveck   (2004-12-09 13:57) [2]

FreeLibrary(LibHandle) и где это нужно написать если да.
это писать нужно когда библиотека уже не нужна (в вашем случае после  того как вы перестали использовать фому из dll, то есть закрыли ее) и не будет больше использоваться.


 
Digitman ©   (2004-12-09 13:59) [3]


> Tornado


FreeLibrary() весьма желательно вызывать, например, в том случае, если далее по ходу алгоритма эта библ-ка более не понадобится

а вот по поводу освобождения ресурсов - ответ на вопрос не так прост ... если форма просто закрыта, но как объект она при этом не уничтожена, и при этом оба проекта собраны с ран-тайм пакетами, то FreeLibrary() не ведет к освобождению ресурсов, занятых по прежнему существующей формой


 
Tornado ©   (2004-12-09 14:06) [4]

сейчас наверно глупость скажу, но:

где использовать FreeLibrary(LibHandle), ну например я вызываю форму из DLL нажав кнопку в адресном приложении, если в коде написать

........
........
if @CreateMyForm <> nil then
  CreateMyForm(Application.Handle);
// форма загрузилась
finally
 FreeLibrary(LibHandle) // форма закрылась :)
end;

то форма из DLL после загрузки сразу же закрывается. Это понятно, вот вопрос где использовать тогда FreeLibrary(LibHandle)?


 
Digitman ©   (2004-12-09 14:18) [5]

в обработчике события OnDestroy этой формы посылай гл.окну хост-приложения некое предопределенное сообщение, извещающее о факте разрушения формы, вызванного действиями пользователя, нажавшего кнопку "Закрыть"  .. в обработчике сообщения ты как раз и можешь выгрузить библ-ку


 
Tornado ©   (2004-12-09 14:22) [6]

>> Digitman ©   (09.12.04 14:18) [5]

спасибо, буду разбираться, но если есть манюсенький примерчик - было бы здорово :)


 
Digitman ©   (2004-12-09 14:46) [7]

в библ-ке :

const
 WM_DLLFORMDESTROY = WM_USER + 1000;
..

var
App: TApplication;

//эксп.ф-ция, создающая немодальную форму
procedure CreateMyForm(HostApplication);
begin
 App := Application;
 Application := HostApplication;
 MyForm := TMyDLLForm.Create(Application);
 ..
end;

procedure TMyDLLForm.FormDestroy(Sender: TObject);
begin
 PostMessage(Application.Handle, WM_DLLFORMDESTROY, 0, 0);
end;

в хост-приложении :

const
 WM_DLLFORMDESTROY = WM_USER + 1000;

//обработчик события OnMessage объекта Application
procedure TSomeObject.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
 if Msg.message = WM_DLLFORMDESTROY then
  begin
   FreeLibrary(LibHandle);
   Handled := True;
  end;
end;


 
Tornado ©   (2004-12-10 10:07) [8]

спасибо огромное всем!



Страницы: 1 вся ветка

Текущий архив: 2004.12.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.035 c
14-1102443677
Def
2004-12-07 21:21
2004.12.26
Операционные усилители


14-1102493504
PRM
2004-12-08 11:11
2004.12.26
Чем открыть файл xmlsdkdoc.msm


3-1101462359
Chery
2004-11-26 12:45
2004.12.26
Синтаксис SQL: MySQL - драйвер ODBC 03.51.05 - Midas (delphi)


3-1101317039
Sergy Ivanec
2004-11-24 20:23
2004.12.26
Вопрос по Fastreport


1-1102714908
Larisa
2004-12-11 00:41
2004.12.26
По умолчанию, в Делфи используется MS San Serif,