AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy Socket schließen
Thema durchsuchen
Ansicht
Themen-Optionen

Indy Socket schließen

Ein Thema von idontwantaname · begonnen am 29. Sep 2008 · letzter Beitrag vom 30. Sep 2008
Antwort Antwort
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, 16: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
Benutzerbild von idontwantaname
idontwantaname

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

Re: Indy Socket schließen

  Alt 30. Sep 2008, 18:04
Hi!

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

Lg oli
Oliver Hanappi
Besucht meine neue Homepage: http://oli.hux.de
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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