AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso??
Thema durchsuchen
Ansicht
Themen-Optionen

Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso??

Ein Thema von SimStar001 · begonnen am 13. Mai 2009 · letzter Beitrag vom 14. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso??

  Alt 13. Mai 2009, 10:46
Hallo, ich habe folgende Klasse deklariert:

Delphi-Quellcode:
unit Livetrack;

interface

uses IdFTP, IdHTTP;

type TFTP = class(TIDFTP)
    end;

type THTTP = class(TIDHTTP)
    end;

type TLivetrack = class(TObject)
      private
      {private Vars}
      FHTTP : THTTP;
      FFTP : TFTP;
      FCacheDirectory : string;
      FFTPHost : String;
      FFTPDirectory : String;
      FFTPLoginName : String;
      FFTPPassword : String;
      FHTTPUrl : String;
      FFileName : String;
      FVID : String;

      {Set Procedures}
      procedure SetFTPHost(Host : String);
      procedure SetFTPDirectory(Directory : String);
      procedure SetFTPLoginName(LoginName : String);
      procedure SetFTPPassword(Password : String);
      procedure SetVID(VID : String);

      {get Functions}
      function GetFTPHost : String;
      function GetFTPLoginName : String;
      function GetFTPPassword : String;

      public
      {Functions}
      constructor create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string); overload;
      constructor create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String); overload;
      destructor destroy ; override;

      {properties}
      property CacheDirectory : String read FCacheDirectory write FCacheDirectory;
      property FTPHost : String read GetFTPHost write SetFTPHost;
      property FTPDirectory : String read FFTPDirectory write SetFTPDirectory;
      property FTPLoginName : String read GetFTPLoginName write SetFTPLoginName;
      property FTPPassword : String read GetFTPPassword write SetFTPPassword;
      property HTTPUrl : String read FHTTPUrl write FHTTPUrl;
      property FileName : String read FFileName write FFileName;
      property VID : String read FVID write SetVID;
      end;

implementation

{Set Procedures}

procedure TLivetrack.SetFTPHost(Host : String);
begin
  self.FFTP.Host := Host;
end;

procedure TLivetrack.SetFTPDirectory(Directory : String);
begin
  if Directory = 'then
    exit;
    
  if self.FFTP.Connected then
    self.FFTP.ChangeDir(Directory);
end;

procedure TLivetrack.SetFTPLoginName(LoginName : String);
begin
  if self.FFTP.Connected then
    exit;

  self.FFTP.Username := LoginName;
end;

procedure TLivetrack.SetFTPPassword(Password : String);
begin
  if self.FFTP.Connected then
    exit;

  self.FFTP.Password := Password;
end;

procedure TLivetrack.SetVID(VID : String);
begin
  self.VID := VID;
end;
// Ende Set Procedures

////////////////////////////////////////////////////////////////////////////////


{Get Functions}

function TLivetrack.GetFTPHost : String;
begin
  result := self.FFTP.Host;
end;

function TLivetrack.GetFTPLoginName : String;
begin
  result := self.FFTP.Username;
end;

function TLivetrack.GetFTPPassword : String;
begin
  result := self.FFTP.Password;
end;
// Ende Get Functions

////////////////////////////////////////////////////////////////////////////////


{Constructor}

constructor TLivetrack.create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String);
begin
  inherited create;

  self.FFTP := TFTP.Create(nil);
  self.FHTTP := THTTP.Create(nil);

  // Setzen der Parameter für HTTP und FTP
  self.CacheDirectory := CacheDirectory;
  self.FTPHost := FTPHost;
  self.FTPDirectory := FTPDirectory;
  self.FTPLoginName := FTPLoginName;
  self.FTPPassword := FTPPassword;
  self.HTTPUrl := HTTPUrl;
  self.FileName := FileName;
  //self.VID := 'none';

end;

constructor TLivetrack.create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string);
begin
  inherited create;

  self.FFTP := TFTP.Create(nil);
  self.FHTTP := THTTP.Create(nil);

  // Setzen der Parameter für HTTP und FTP
  self.CacheDirectory := CacheDirectory;
  self.FTPHost := FTPHost;
  self.FTPDirectory := FTPDirectory;
  self.FTPLoginName := FTPLoginName;
  self.FTPPassword := FTPPassword;
  self.HTTPUrl := HTTPUrl;
  self.FileName := FileName;
  //self.VID := VID;

end;
// Ende Constructor

////////////////////////////////////////////////////////////////////////////////


{Destructor}

destructor TLivetrack.destroy;
begin
  self.FFTP.Free;
  self.FHTTP.free;

  inherited destroy;
end;
// Ende Destructor

////////////////////////////////////////////////////////////////////////////////

end.

Nun habe ich das Problem, dass es zu einem Stack Überlauf kommt wenn ich diese erzeugen will, allerdings nur wenn ich die Property VID aufrufe.

property VID : String read FVID write SetVID;
Der Aufruf sieht so aus :

Delphi-Quellcode:
type TForm1 = class(TForm)
   (...)
   public
    Livetrack : TLivetrack;
    { Public-Deklarationen }
  end;

(...)

Livetrack := TLivetrack.create(extractfilepath(paramstr(0)) + '\Data\Cache','marcos-ivao-tools.net'
  ,'***','***','***','***','data.csv');

Hat wer ne Idee, wieso es gerade beim Aufrufen von VID zum Überlauf kommt?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 10:48
Ja der Setter rufst sich ja selbst auf, müsste
Delphi-Quellcode:
procedure TLivetrack.SetVID(VID : String);
begin
  self.FVID := VID;
end;
heissen
Markus Kinzler
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#3

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 10:51
Ok , danke.

Irgendwie sieht man manchmal einfach die einfachsten Fehler net!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 10:52
Glaub nicht, dass das anderen nicht auch schon passiert ist *pfeif*
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 10:54
Zitat:
Glaub nicht, dass das anderen nicht auch schon passiert ist Rolling Eyes *pfeif*
ich glaube schon (fast) jedem.
Markus Kinzler
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#6

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 11:26
Das beruhigt mich .... *fg*

Vielen Dank nochmal!
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 11:28
Mal 'ne Frage am Rande: Wozu self.FVID := VID; hier das self? Sollte doch auch ohne funktionieren
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 11:32
VID := VID; säh ja komisch aus.

Ich glaub aber das viele das self. mit aus anderen Sprachen übernehmen und es in Delphi auch überall hinschreiben.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 11:39
auch wenn es OT ist:
Das Self hinzuschreiben hat in meinen Augen mehr Vor- als Nachteile. Man sieht dadurch sofort das es sich um eine Variable der Klasse handelt und es keine globale, parameter etc. ist.
Zudem hat man dadurch die Möglichkeit Variablen der Klasse genau so zu benennen wie auch Parameter der Funktion in denen die Variable gesetzt wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Stack Überlauf, beim eruezgen der eigenen Klasse! Wieso?

  Alt 13. Mai 2009, 12:16
Aus den von Jens genannten Gründen schreibe ich auch immer self davor, obwohl es nicht notwendig ist. Aber man sieht sofort, dass es sich dabei um ein Feld der eigenen Klasse handelt, ohne lange suchen zu müssen. Und wenn dann noch ein with-Block im Spiel ist, kommt man oft um self nicht mehr rum, außer durch Vermeidung von with
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:02 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