Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.035 c
14-1102221282
olookin
2004-12-05 07:34
2004.12.26
Всех люблю!!!!!!!!!


1-1102616677
Intr
2004-12-09 21:24
2004.12.26
Service Application


1-1102686117
Easter
2004-12-10 16:41
2004.12.26
TEdit ы на TForm


3-1101714458
ruslan_as
2004-11-29 10:47
2004.12.26
Какими компонентами и как создавать скриптами таблицы InterBase


14-1102016407
av3nger
2004-12-02 22:40
2004.12.26
Статьи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский