Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Некорректная Работа В Dll  (Прочитано 8153 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Shouldercannon
Помогающий

ru
Offline Offline

« : 02-01-2012 08:21 » 

1. В DoTerminate выполняется только одно событие
 2. Прогресс бар при последующих закачках не двигается и вообще неправильно показывает прогресс
 3. Нулевая реакция на синхронизацию (написанные там события не выполняются)

 Тоже самое без DLL работает Великолепно. В чём проблема или это неизбежный косяк DLL?

Код:
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.

* Projects.zip (2.6 Кб - загружено 802 раз.)
Записан
zubr
Гость
« Ответ #1 : 02-01-2012 09:47 » 

1. Где ты берешь этот быдло-код?
2. Косяк не DLL, а косяк в незнании работы GUI Windows-приложений и структуры Delphi-приложений. Проблема в том, что у тебя, при загрузке формы из dll отсутствует очередь сообщений, которая в Delphi-приложениях реализуется в объекте Application. Надо объекту Application из dll передать хендл объекта Application приложения, из которого ты загружаешь dll.
Записан
Shouldercannon
Помогающий

ru
Offline Offline

« Ответ #2 : 03-01-2012 11:55 » 

Цитата
Использование форм в dll чревато самыми интересными последствиями, которые сложно вычислить и объяснить. Костылей можно натворить, но потом в другом месте вылезет.
Вы предлагаете дополнительный костыль Улыбаюсь
Записан
zubr
Гость
« Ответ #3 : 03-01-2012 12:44 » 

Shouldercannon
1. Не указан автор приведенной тобой цитаты.
2. Автор не прав. Если все сделать корректно, используя знания работы Delphi-программ и WinApi, то форма из dll нормально работает. Ну а если применять при разработке быдлокод без понятия, а вставлением костылей методом научного, а точнее лженаучного тыка, то да - можно поиметь интересные, а порой плачевные последствия.
3. Вычислить и объяснить можно все. Для этого существует справочная литература, исходные коды, и множественный инструментарий программиста: отладчики и дизассемблеры.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 05-01-2012 13:58 » 

погуглите формы в длл. на Королевстве Дельфи была великолепная статья на эту тему. вопросы, которые вас мучают выходят за рамки ответа в топике. если разбираться досконально и делать все по уму - это, практически, готовая курсовая работа. просто нет смысла изобретать велосипед.
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines