Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизФорма в 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c