Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Socket schließen (https://www.delphipraxis.net/121514-indy-socket-schliessen.html)

idontwantaname 29. Sep 2008 15:09


Indy Socket schließen
 
Hallo!

Ich habe eine von mir geschriebene DLL, die ich in meiner Anwendung lade und wieder entlade. In dieser DLL wird ein Udp Server erzeugt. Beim Schließen hängt sich die Anwendung auf und leider weiß ich nicht wieso.

Der Code für das Laden und Entladen der DLL ist recht simpel, weshalb ich annehme, dass dort alles funktioniert:
Delphi-Quellcode:
var
  lib: Cardinal;

procedure TForm1.ButtonStartClick(Sender: TObject);
begin
  lib := LoadLibrary(PAnsiChar('C:\....'));
end;

procedure TForm1.ButtonStopClick(Sender: TObjekt);
begin
  FreeLibrary(lib);
end;
Die Hauptdatei meiner DLL macht nichts weiter, als eine Unit einzubinden. Diese Unit hat einen Initialisierungs- und Finalisierungsteil:
Delphi-Quellcode:
implementation

var
  Sore: TSore;

procedure Main(Parameter: Pointer);
begin
  Sore := TSore.Create(50001);
  Sore.Run;
end;

initialization

Main(nil);
InstallHook; // Funktioniert ohne Probleme, bereits getestet

finalization

RemoveHook; // Funktioniert ohne Probleme, bereits getestet
Sore.Close;
Sore.Free;
Sore := nil;
Das Objekt der Klasse TSore (wofür das steht ist nicht so wichtig ;)) erzeugt in ihrem Konstruktor einen Udp Server und in der Close-Methode sollte er wieder geschlossen werden.
Delphi-Quellcode:
constructor TSore.Create(port: Integer);
begin
  inherited Create;

  Self.socket := TIdUDPServer.Create;
  Self.socket.DefaultPort := port;
end;

procedure TSore.Run;
begin
  Self.socket.Active := True;
end;

procedure TSore.Close;
begin
  Self.socket.Active := False; // ab hier reagiert die Anwendung nicht mehr.
  Self.socket.Free;
end;
Ich hab es schon im Quellcode geschrieben: ab socket.Active := False; reagiert die Anwendung nicht mehr bzw. der Socket wird nicht geschlossen. Ich habe noch keine Daten geschickt und es kommen auch keine Exceptions. Wenn ich Close weglasse, dann kommt eine Ausnahme, was ich aber auch annehme, denn der Thread des Udp Servers läuft ja noch während die DLL freigegeben wird.

Könnt ihr mir helfen? Ich hab keine Ahnung, wieso sich die Anwendung aufhängt :?

Lg oli

idontwantaname 30. Sep 2008 17:04

Re: Indy Socket schließen
 
Hi!

Ich erlaube mir mal, hier zu pushen ;)
Brauche die Lösung leider recht dringend :?

Lg oli


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz