![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форма из DLL в отдельном потоке
al3xey © (2009-06-12 23:07:00)Доброго времени суток!
Мне нужно написать DLL с формой.
В длл 4 функции.
Start,SendData,GetData,Finish.
Использоваться должно так:
Программа загружает DLL и вызывает Start. Далее в цикле она выполняет SendData и GetData.
SendData шлет постоянно изменяющиеся данные в DLL (на форме они отображаются). А GetData считывает данные из длл (функция возвращает число DOUBLE), которые зависят от того, какие галочки на форме в данный момент поставлены.
Finish закрывает форму и очищает память. Вроде всё ясно и просто.
Но как мне реализовать это, как вынести рисование формы и обработку её сообщений в отдельный поток?
Заранее спасибо!
Юрий Зотов (2009-06-14 22:09:00) [1]DLL:
library Project2;
uses
Forms,
Unit2 in 'Unit2.pas' {Form2}; // В Unit2 - самая обычная форма
var
Form: TForm2;
procedure Start;
begin
if Form = nil then
Application.CreateForm(TForm2, Form);
Form.Show
end;
procedure Finish;
begin
Form.Free;
Form := nil
end;
{$R *.res}
exports
Start,
Finish;
begin
end.<
/CODE>
Тестовый проект:
type
TProc = procedure;
var
HLib: THandle;
Start, Finish: TProc;
procedure TForm1.FormCreate(Sender: TObject);
begin
HLib := LoadLibrary('Project2.dll');
Start := GetProcAddress(HLib, 'Start');
Finish := GetProcAddress(HLib, 'Finish')
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
FreeLibrary(HLib)
end;
procedure TForm1.btnStartClick(Sender: TObject);
begin
Start
end;
procedure TForm1.btnFinishClick(Sender: TObject);
begin
Finish
end;
Германн (2009-06-13 01:08:00) [2]
> al3xey (13.06.09 00:57) [4]
>
> спасибо за очень содержательные ответы! особенно Amoeba
> =)))
>
> > Ибо перечисленные тобой 4 функции не нуждаются в форме.
>
>
> Да?
>
> > GetData считывает данные из длл (функция возвращает число
> > DOUBLE), которые зависят от того, какие галочки на форме
> > в данный момент поставлены.
>
> А это как тогда реализовать?
> Я пишу DLL для сторонней программы, еслиб у меня были её
> исходники, никаких DLL я б не придумывал
>
1. Да. Не нуждаются.
2. GetData вполне может считывать данные, учитывая "галочки " в форме/окне самой программы.
P.S. Если ты пишешь "DLL для сторонней программы", то твои возможности явным образомограничены тем, что тебе предоставляет та самая сторонняя. И уж тогда вопросы к её авторам, а уж никак не к нам.
al3xey (2009-06-13 00:57:00) [3]спасибо за очень содержательные ответы! особенно Amoeba =)))
> Ибо перечисленные тобой 4 функции не нуждаются в форме.
Да?
> GetData считывает данные из длл (функция возвращает число
> DOUBLE), которые зависят от того, какие галочки на форме
> в данный момент поставлены.
А это как тогда реализовать?
Я пишу DLL для сторонней программы, еслиб у меня были её исходники, никаких DLL я б не придумывал
Германн (2009-06-13 00:48:00) [4]
> al3xey (12.06.09 23:23) [1]
>
> По-сути мне нужно сделать немодальную форму...
По сути тебе нужно сделать DLL без форм. Что, кстати более чем естественно для dll. Ибо перечисленные тобой 4 функции не нуждаются в форме.
Amoeba (2009-06-13 00:26:00) [5]
> Доброго времени суток!
> Мне нужно написать DLL с формой.
>
А нафига? Проблем не хватает?
al3xey (2009-06-12 23:23:00) [6]По-сути мне нужно сделать немодальную форму...