Thema: Delphi Indy Socket schließen

Einzelnen Beitrag anzeigen

Benutzerbild von idontwantaname
idontwantaname

Registriert seit: 31. Aug 2004
Ort: Traiskirchen
575 Beiträge
 
Turbo Delphi für Win32
 
#1

Indy Socket schließen

  Alt 29. Sep 2008, 15:09
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
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat