| 
| 
 | Вопрос # 5 857/ вопрос открыт / | 
 |  Здравствуйте!1. В DoTerminate выполняется только одно событие
 2. Прогресс бар при последующих закачках не двигается и вообще неправильно показывает прогресс
 3. Нулевая реакция на синхронизацию (написанные там события не выполняются)
 
 Тоже самое без DLL работает Великолепно. В чём проблема или это неизбежный косяк DLL?
 К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса) Приложение:Переключить в обычный режим library dll; uses  SysUtils,  Windows,  Dialogs,  Controls,  Unit1 in 'Unit1.pas' {Form1}; {$R *.res} procedure ShowInfo(Win: Integer); stdcall;begin  Form1[Win] := TForm1.Create(nil);  Form1[Win].Show;end; function FormClosed(Win: Integer): Integer;begin  if not Form1[Win].Visible then  begin    Form1[Win].Release;    Result := 1;  end  else Result := 0;end; exports  ShowInfo, FormClosed; beginend.
|  |   Вопрос задал: Shouldercannon (статус: Посетитель)Вопрос отправлен: 2 января 2012, 12:19
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 7; последнее сообщение — 3 января 2012, 20:03; участников в обсуждении: 2. 2 января 2012, 16:07: Вопрос перемещён из тематического раздела Delphi » Общие вопросы по программированию в раздел Delphi » Работа с компонентами и библиотеками модератором Ерёмин А.А. 
|   | Вадим К (статус: Академик), 2 января 2012, 21:48 [#1]:Использование форм в dll чревато самыми интересными последствиями, которые сложно вычислить и объяснить. Костылей можно натворить, но потом в другом месте вылезет. Оно вам нужно? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Shouldercannon (статус: Посетитель), 2 января 2012, 23:29 [#2]:Не нужно. Хотел сделать, чтобы DLL не висла во время загрузки изображения, но увы. Тогда пусть подвисает, но без всяких неожиданностей. 
 [quote]Косяк не DLL, а косяк в незнании работы GUI Windows-приложений и структуры Delphi-приложений. Проблема в том, что у тебя, при загрузке формы из dll отсутствует очередь сообщений, которая в Delphi-приложениях реализуется в объекте Application. Надо объекту Application из dll передать хендл объекта Application приложения, из которого ты загружаешь dll.[/quote]
 Что можете сказать по поводу этого ответа?
 |  
|   | Вадим К (статус: Академик), 3 января 2012, 13:44 [#3]:Для того, что бы длл не висла, прогрессбар не нужен. Используйте себе TThread и не тревожтесь. Вот только onTerminate лучше не использовать - допишите в конец onExecute нужный код. Дело в том, что onTerminate может вызываться как в контексте текущего потока, так и главного. А когда это в длл... 
 По поводу цитаты. Человек предлагает вставить костыль. Ну, оно может заработает, но завтра вылезет другой.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Shouldercannon (статус: Посетитель), 3 января 2012, 17:24 [#4]:Дискуссия становится всё горячее и запутанней. [quote]1. Автор не прав. Если все сделать корректно, используя знания работы Delphi-программ и WinApi, то форма из dll нормально работает. Ну а если применять при разработке быдлокод без понятия, а вставлением костылей методом научного, а точнее лженаучного тыка, то да - можно поиметь интересные, а порой плачевные последствия.
 2. Вычислить и объяснить можно все. Для этого существует справочная литература, исходные коды, и множественный инструментарий программиста: отладчики и дизассемблеры.[/quote]
 |  
|   | Вадим К (статус: Академик), 3 января 2012, 17:50 [#5]:кто этот "Автор", и кто вообще все это пишет? Или в данном случае "Автор" - это я? Раз Ваш эксперт знает, так пусть и напишет Вам его правильное решение. Но я настойчиво не рекомендую использовать формы в dll. Да я и горячести дискуссии не вижу. Я с ним не спорил, это Вы тут пытаетесь создать дискуссию.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Shouldercannon (статус: Посетитель), 3 января 2012, 19:03 [#6]:Под "Автор" подразумеваетесь Вы. Если он такой супер программист, то я попробую с ним написать то, с чем столкнулся при использовании потока в DLL и доказать, что сие можно сделать без костылей   |  
|   | Вадим К (статус: Академик), 3 января 2012, 20:03 [#7]:Поймите, я не запрещаю Вам и ему так делать. Но не рекомендую. Но если завтра появится на сайте вопрос " я тут костылей нагородил, оно даже работает, но вот такая то ситуация обрабатывается странно" - я не буду комментировать.
 Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |