Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Probleme mit Dateiempfang von TSockets

  Alt 3. Feb 2007, 12:54
Zitat von robinWie:
ich habe im Internet was gefunden umd mit den TSocket Komponenten Dateien zu schicken.
Und offensichtlich falsch abgeschrieben

Zitat von robinWie:
Hier der Code beim Empfangen:
Delphi-Quellcode:
  FST := TFileStream.Create(TMP, fmCreate or fmShareDenyWrite);
...
  finally
    FST := nil;
    FST.Free;
  end;
Das Problem liegt in deinem finally, tausche mal die beiden Zeilen oder lass FST := nil gleich weg. FST ist vom Typ TFileStream, hat also als Typ eine Klasse. Bei Objekten (Instanzen von Klassen) wird implizit mit Zeigern gearbeitet. Ohne dass Du etwas dafür/dagegen tun kannst wird in der Variablen FST also nur die Adresse des Objekts, dass Du mit FST := TFileStream.Create(..) erzeugst gespeichert.
Im finally-Block lässt Du FST dann erstmal auf die Adresse nil zeigen (wo bekanntlich nichts steht). Dein eigentliches Objekt (dass Du mit einer Sperre fmCreate or fmShareDenyWrite angelegt hast) befindet sich noch im Speicher. Mit dem FST.Free gibst Du ein Objekt an der Adresse nil frei, Free macht genau dann nichts (weil man eben nichts nicht freigeben kann).
Wichtig ist hier wirklich zu verstehen, dass FST nur der (implizite) Zeiger auf ein Objekt ist. Weißt Du FST einen anderen Wert zu, so änderst Du nur die Adresse auf die die Variable zeigt, nicht das Objekt hinter eben dieser Adresse.

Gruß Der Unwissende
  Mit Zitat antworten Zitat