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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2011, 20:19   #1
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию длл и потоки

Пару дней рылся в дебрях инета, но так проблема осталась на том же месте.
Вот здесь похожая проблема 3-х летней давности.
_http://programmersforum.ru/showthread.php?t=14759

Есть прога, написанная мной.
2 юнита, форма и поток.
Решил все это дело прикрутить как плагин к посторонней программе.
Форму затолкать в длл не составило труда, а вот со вторым юнитом как раз проблема.
Поток следит за состоянием порта (ком) и передает данные на форму, но в плагине все это связать не получается.
Потому прошу помощи у сообщества, хотя бы ссылками или примерами.
z-wer вне форума Ответить с цитированием
Старый 15.08.2011, 20:23   #2
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Не понял сути вопроса. Не получается добавить юнит? Или не получается использовать процедуры юнита? Конкретнее, пожалуйста.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 15.08.2011, 20:41   #3
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Да вроде юнит добавить не проблема, только вот взаимодействия формы и потока нет из длл.
Правда на просторах инета много написано, что поток из длл запускать это не лучший вариант...
Не получается использовать процедуры потока.
z-wer вне форума Ответить с цитированием
Старый 15.08.2011, 20:46   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Есть библиотека.
В ней - юник с формой.
В юните формы - объявление нового класса потока.
Из библиотеки стартуете поток.
В Execute потока:
Код:
procedure TFormThread.Execute;
begin
  inherited;
  Application.Initialize;
  Application.CreateForm(TMainForm,MainForm);
  Application.Run;
  Application.Title:='J-Bot by Johnson';
end;
Дальше разберетесь?
Суть в том, что аппликацию надо запускать из отдельного потока в библиотеке.
Правда, дальше вы столкнетесь с другой проблеммой - ошибкой при завершении несущего приложения...



Так-с... Конкретный пример:
Код:
unit BotForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, _MainFrame;

type
  TMainForm = class(TForm)
  private
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public declarations }
  end;

  TFormThread = class(TThread)
  private

  public
    Destructor Destroy; Override;
  protected
    Procedure Execute; Override;
  end;

var
  MainForm: TMainForm;
  FT:TFormThread;
Код:
{ TFormThread }
destructor TFormThread.Destroy;
begin
  Application.DestroyComponents;
  Application.Free;
  inherited;
end;
procedure TFormThread.Execute;
begin
  inherited;
  Application.Initialize;
  Application.CreateForm(TMainForm,MainForm);
  Application.Run;
  Application.Title:='J-Bot by Johnson';
end;
в главной части библиотеки:
Код:
  FT:=TFormThread.Create(True);
  FT.Priority:=tpNormal;
  FT.FreeOnTerminate:=True;
  FT.Resume;
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 15.08.2011, 20:56   #5
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Цитата:
Правда, дальше вы столкнетесь с другой проблеммой - ошибкой при завершении несущего приложения...
Спасибо за эксемплы, а с этого места можно немного подробней.
Млин я с такой задачкой впервые лоб в лоб, сложно мне немного...
z-wer вне форума Ответить с цитированием
Старый 15.08.2011, 21:02   #6
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

в одном процессе будут присутствовать два потока, считающих себя главными...
есть вариант отлавливать сообщения о закрытии несущего окна и перед этим убивать своё, но это теория, я пока не запаривался с этим.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 15.08.2011, 21:15   #7
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Да, но у меня в экзешнике все пучком.
Но без отдельного потока, отслеживающего состояние порта не обойтись.

И еще вопрос, может конечно чайниковский.
Есть ли смысл экзешник оставить "так как есть" и наладить связь с посторонней прогой через длл, просто типа сваливать в одну папку ехе и длл?
z-wer вне форума Ответить с цитированием
Старый 15.08.2011, 21:20   #8
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

1 вариант - использовать поиск контролов в чужом окне и заводить инфу в них из своего процесса.
2 вариант - написать полноценную программу, которая сама будет читьать порт и исполнять необходимые действия.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 15.08.2011, 21:34   #9
z-wer
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 89
По умолчанию

Ладно, может я неправильно спросил, может вы неправильно поняли, а может и то и другое...
Если пару вопросов в личку задам не против будете?
Либо по скайпу?
z-wer вне форума Ответить с цитированием
Старый 15.08.2011, 21:49   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Поди synchronize() влупил и ждешь от него чуда.
А чудеса эти - они случаются только тогда когда понимаешь как эти чудеса делаются)
mss вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GLScene и ДЛЛ CrHD Мультимедиа в Delphi 1 24.05.2011 12:56
Длл библиотека на С++ Гончий Общие вопросы C/C++ 20 01.06.2010 01:30
Длл на х32 CrystaLize Общие вопросы C/C++ 1 25.12.2009 17:58
Ошибка в длл Яр|/||< (^_^) Общие вопросы Delphi 2 16.10.2009 15:58
Фрэймы из ДЛЛ SunKnight Общие вопросы Delphi 4 06.01.2008 16:32