Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

IdUDPServer в dll [D6, Win2k]


Страницы:   1 2

alin ©   (2004-03-22 08:39:00) 

в dll находится форма на которой лежит IdUDPServer форма создаётся при загрузке dll,
при выгрузке её из памяти приложение зависает если свойство Active UDPServera установлено в True если установлено False то выгрузка проходит нормально, попытка в событии destroy формы установить false не помогает.

Помогине кто может, что я делаю не так!


Digitman   (2004-03-22 10:44:00) [21]

теоретически виса быть не должно
если ты не менял св-во TIdUDPServer.AcceptWait, то не более чем через секунду процесс выгрузки библ-ки должен успешно завершиться

попробуй для проверки след.код :

procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
begin
 if UDPS.Active then
   begin
    UDPS.Active := False;
    Sleep(AcceptWait);
   end;
  frmMain1.Free;
end;
end;


alin   (2004-03-22 09:55:00) [22]

вот текст:

library MyDll;

uses
 SysUtils,Classes, Forms,
 Windows, Dialogs,
 Unit2 in 'Unit2.pas' {Form2};

{$R *.res}
var
 frmMain1 : TForm2;

procedure MyDLLProc(Reason: Integer);
begin
 if Reason = DLL_PROCESS_DETACH then begin
   frmMain1.Free;
 end;
end;

begin
 DLLProc := @MyDLLProc;
 frmMain1:=TForm2.Create(Application);
 frmMain1.Show;
end.

на форме только две кнопки

procedure TForm2.Button1Click(Sender: TObject);
begin
 UDPS.Active:=true;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 UDPS.Active:=false;
end;


вот вызывающая форма:
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 f : LongWord;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 f:=Loadlibrary('MyDll.dll');
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 FreeLibrary(f);
end;

end.


Digitman   (2004-03-22 09:54:00) [23]

хорошо.
приведи текст, реализующий твой алгоритм работы с IdUDPServer, начиная с Active := True и вплоть до Active := False


alin   (2004-03-22 09:50:00) [24]

в OnUDPRead вообще ничего нет


Digitman   (2004-03-22 09:08:00) [25]

приведи текст обработчика OnUDPRead


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо