Сейчас на форуме: bartolomeo, tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› к теме Delphi, dll, TThread, DialogBox
Посл.ответ Сообщение

Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 марта 2011 16:34 · Поправил: FockuS
· Личное сообщение · #1

Есть Dll, которая показывает DialogBox (создан из *.res-файла). Есть TThread, который должен к примеру менять текст в этом DialogBox-е. Суть в след., TThread не обрабатывается при вызове DialogBox-а. Также останавливаются предыдущие потоки.

void - по теме ответить никак ? Умный ? мог бы и догадаться.

Code:
  1.  if CreateThread(nil,0,@ptfhc,nil,0,ThID)=0 then exit;
  2.  DialogBox(hInstance, 'WIN', 0, @DlgProc,0);



Archer, что тут отлаживать? предыдущие потоки останавливаются.
пока DialogBox не закрыт. потоки заморжены. хотя и стоит статус Active.

Тема создана в Программирование. Где ее еще создавать ???




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 марта 2011 16:50
· Личное сообщение · #2

И не обрабтается, если вызов идёт из callback'a библиотеки, т.к. пока этот вызов не вернёт управление, другие потоки не будут выполняться, поэтому код внутри нового потока не изменит текст.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 марта 2011 16:57
· Личное сообщение · #3

совет есть ?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 06 марта 2011 19:45
· Личное сообщение · #4

FockuS
Зависит от того, что нужно сделать. Формулируйте задачу конкретнее.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 06 марта 2011 20:02 · Поправил: FockuS
· Личное сообщение · #5

ARCHANGEL
нужно запустить DialogBox с dll, отработать поток в dll, закрыть DialogBox, передать управление программе




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 07 марта 2011 09:30
· Личное сообщение · #6

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




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 марта 2011 17:27
· Личное сообщение · #7

FockuS пишет:
# if CreateThread(nil,0,@ptfhc,nil,0,ThID)=0 then exit;
# DialogBox(hInstance, 'WIN', 0, @DlgProc,0);


Ну даже тут сразу видно грубейшее нарушение программирования в делфи. Если работаешь с визуальными компонентами то можно использовать только наследника TThread и больше ничего, иначе может быть миллион всяких разных ошибок.

И кстати непонятно сказано что TThread и используется, а пример приводится без него. В общем вопрос непонятный вообще, либо нужно подробнее расписать либо показать исходник.

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: tihiy_grom

Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 07 марта 2011 17:51
· Личное сообщение · #8

FockuS
у DialogBox должно быть только 4 параметра, а не 5.
выкладывайте исходник, потому что "проблема" действительно непонятна.




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 07 марта 2011 19:20 · Поправил: ajax
· Личное сообщение · #9

FockuS
Для начала стоит почитать, что про треды из длл написано в мануалах от МС. Дальше - похожие проблемы на дельфевых форумах. Вообще, потоки из либы - не айс, а с прямым вызовом без класса треад надо еще некие телодвижения делать, а не тупо хардкодить.
PE_Kill
Там нет тредов визуальных.
Добавлено: не так понял

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: -0.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 07 марта 2011 21:10
· Личное сообщение · #10

PE_Kill Спасибо, я не знал что надо использовать TThread и всегда думал что дельфи глючная фигня.



Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2011 01:55 · Поправил: FockuS
· Личное сообщение · #11

Archer, Прошу прощения, но я Вас ни в чем не виню.

ajax
В примере сделан упращенный вариант.
Единственное что приходит на ум. поставить вызываемую прогу в цыкл до завершения потока.
(минус в том, что прогу писал не я)

PE_Kill
C наследниками тоже был тест. результат тотже.
Без вызова DialogBox поток отрабатывает на УРА.
Поток вызываетяс сразу с точки входа без экспорта. (Загрузилась, отработала поток. выгрузилась).

tihiy_grom
Вообщето вызывается DialogBoxParam, но проблемы не решает.

DialogBox нужен только для визуализации, тоесть что происходит в данный момент.
(Визуальная работа потока.)



Ранг: 441.3 (мудрец), 297thx
Активность: 0.410.04
Статус: Участник

Создано: 08 марта 2011 02:03
· Личное сообщение · #12

ну делайте сами тогда, если не хотите свои кривые исходники показывать

| Сообщение посчитали полезным: SReg, FockuS

Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2011 02:18 · Поправил: FockuS
· Личное сообщение · #13

tihiy_grom пишет:
ну делайте сами тогда, если не хотите свои кривые исходники показывать


если ответить нечем, то лутше промолчать. без обид.

Code:
  1. OEP
  2.  if CreateThread(nil,0,@ptfhc,nil,0,ThID)=0 then exit;
  3.  DialogBox(hInstance, 'WIN', 0, @DlgProc,0);
  4. exit с dll


писать больше нечего. код потока не нужен.
читаем обращение к PE_Kill




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 08 марта 2011 10:52
· Личное сообщение · #14

FockuS
"The DialogBox macro uses the CreateWindowEx function to create the dialog box."
А с MessageBox вместо DialogBox та же проблема?

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2011 12:32 · Поправил: FockuS
· Личное сообщение · #15

ajax пишет:
FockuS"The DialogBox macro uses the CreateWindowEx function to create the dialog box."А с MessageBox вместо DialogBox та же проблема?

делал и с CreateWindowEx, результ.=0
c MessageBox проблем нету



Ранг: 18.2 (новичок)
Активность: 0.010
Статус: Участник

Создано: 08 марта 2011 19:32
· Личное сообщение · #16

Всем спасибо.
ARCHANGEL и ajax за напоминание о телодвижениях


 eXeL@B —› Программирование —› к теме Delphi, dll, TThread, DialogBox
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати