|
Вопрос # 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;
-
- begin
- end.
 |
Вопрос задал: 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]:
Поймите, я не запрещаю Вам и ему так делать. Но не рекомендую.
Но если завтра появится на сайте вопрос " я тут костылей нагородил, оно даже работает, но вот такая то ситуация обрабатывается странно" - я не буду комментировать.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|