![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IdUDPServer в dll [D6, Win2k]
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