|
Antwort |
Registriert seit: 18. Jan 2008 594 Beiträge |
#1
Hallo, ich habe mir eine eigene Klasse programmiert, die ich auch getestet habe einem Testprogramm, und das mit erfolg. Also Fehler in der Klasse sind ausgeschlossen.
Nun wollte ich das ganze in das eigentliche Programm packen und dann komt es zur EAccessViolation wärend des erzeugens des Objektes: hier ersteinmal die Klasse :
Delphi-Quellcode:
unit Livetrack;
interface uses IdFTP, IdHTTP, Classes, DateUtils, SysUtils; //(const CallSign : String; const Departure_Airport : String; const Arrival_Airport : String; const Current_Speed : String; Current_Altitude : String; const Current_Waypoint : String; const Planned_Route : String; const Squawk : String; const Aircraft : String ; const WakeTurbulanceClass : String) : boolean; 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; FInfoDaten : TStringList; {Set Procedures} procedure SetFTPHost(Host : 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; {Normal Functions} function download(TimeOut : Integer) : boolean; function upload(TimeOut : Integer) : boolean; function refresh (const RealName : String; const ATC_Position : String; const Tool : String): boolean; {InfoDaten Functions and Procedures} procedure AddInfoDaten(const CallSign : String; const Departure_Airport : String; const Arrival_Airport : String; const Current_Speed : String; Current_Altitude : String; const Current_Waypoint : String; const Planned_Route : String; const Squawk : String; const Aircraft : String ; const WakeTurbulanceClass : String); function UploadInfoDaten(TimeOut : Integer) : boolean; procedure ClearInfoDaten; {properties} property CacheDirectory : String read FCacheDirectory write FCacheDirectory; property FTPHost : String read GetFTPHost write SetFTPHost; property FTPDirectory : String read FFTPDirectory write FFTPDirectory; 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.ClearInfoDaten; begin self.FInfoDaten.clear; deleteFile(self.FCacheDirectory + '\' + self.FVID + '.csv'); end; procedure TLiveTrack.AddInfoDaten(const CallSign : String; const Departure_Airport : String; const Arrival_Airport : String; const Current_Speed : String; Current_Altitude : String; const Current_Waypoint : String; const Planned_Route : String; const Squawk : String; const Aircraft : String ; const WakeTurbulanceClass : String); begin self.FInfoDaten.add(CallSign + ':' + Departure_Airport + ':' + Arrival_Airport + ':' + Current_Speed + ':' + Current_Altitude + ':' + Current_Waypoint + ':' + Planned_Route + ':' + Squawk + ':' + Aircraft + ':' + WakeTurbulanceClass); end; function TLiveTrack.UploadInfoDaten(TimeOut : Integer) : boolean; begin result := false; self.FInfoDaten.SaveToFile(self.CacheDirectory + '\' + self.VID + '.csv'); self.FFTP.Port := 21; self.FFTP.Connect(true,TimeOut); if self.FFTPDirectory <> '' then self.FFTP.ChangeDir(self.FFTPDirectory); try self.FFTP.Put(self.FCacheDirectory + '\' + self.VID + '.csv', self.VID + '.csv' , false); finally result := true; end; self.FFTP.Disconnect; end; procedure TLivetrack.SetFTPHost(Host : String); begin self.FFTP.Host := Host; 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.FVID := 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 //////////////////////////////////////////////////////////////////////////////// {Normal Functions} function createTimeStamp : string; begin result := inttostr(DateTimeToUnix(now)); end; // *.csv - Aufbau {VID : TimeStamp : RealName : ATC Position : Tool} function TLivetrack.refresh(const RealName : String; const ATC_Position : String; const Tool : String) : boolean; function datainlist(const TList : TStringlist) : integer; var i : Integer; begin result := -1; if TList.Count = 0 then exit; for i := 0 to TList.Count - 1 do if self.FVID = copy(TList.Strings[i],1,pos(':',TList.strings[i]) - 1) then begin result := i; break; end; end; var TList : Tstringlist; Index : integer; FileName : string; TimeStamp : string; begin result := false; TList := TStringlist.Create; FileName := self.FCacheDirectory + '\' + self.FFileName; try if Fileexists(FileName) then Tlist.LoadFromFile(FileName); Index := datainList(TList); TimeStamp := createTimeStamp; if Index = -1 then TList.add(self.FVID + ':' + TimeStamp + ':' + RealName + ':' + ATC_Position + ':' + Tool) else TList.strings[Index] := self.FVID + ':' + TimeStamp + ':' + RealName + ':' + ATC_Position + ':' + Tool; finally result := true; end; TList.SaveToFile(FileName); TList.Free; end; function TLivetrack.upload(TimeOut : Integer) : boolean; begin result := false; self.FFTP.Port := 21; self.FFTP.Connect(true,TimeOut); if self.FFTPDirectory <> '' then self.FFTP.ChangeDir(self.FFTPDirectory); try self.FFTP.Put(self.FCacheDirectory + '\' + self.FFileName , self.FFileName , false); finally result := true; end; self.FFTP.Disconnect; end; function TLivetrack.download(TimeOut : Integer) : boolean; var FileStream : TFileStream; begin result := false; FileStream := TFileStream.create(self.FCacheDirectory + '\' + self.FFileName,fmcreate); self.FHTTP.Connect(TimeOut); try self.FHTTP.Get(self.FHTTPUrl + '/' + self.FFileName , FileStream); finally result := true; end; FileStream.free; self.FHTTP.Disconnect; end; // Ende Normal 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'; self.FInfoDaten.Create; 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); self.FInfoDaten := TSTringList.create; // 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; self.FInfoDaten.Create; end; // Ende Constructor //////////////////////////////////////////////////////////////////////////////// {Destructor} destructor TLivetrack.destroy; begin self.FFTP.Free; self.FHTTP.free; self.FInfoDaten.Free; inherited destroy; end; // Ende Destructor //////////////////////////////////////////////////////////////////////////////// end. Und zwar wird die EAccessViolation ier aufgerufen:
Delphi-Quellcode:
FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string);
begin inherited create; self.FFTP := TFTP.Create(nil); // <==== Dieser Teil wird markiert ud spuckt den Fehler aus. Das Ganze Versteh ich nicht, weil es ja wiegesagt im Testprogramm funktioniert hatte! Wer weis woran es liegen könnte?
Marco Tröger
http://www.marcos-ivao-tools.net |
Zitat |
Registriert seit: 11. Okt 2003 Ort: Elbflorenz 44.184 Beiträge Delphi 12 Athens |
#2
*glaskugelraussuch* dann wird es wohl am TFTP.Create(nil); liegen?
vermutlich wurde an anderer Stelle irgendwas nicht/anders initialisiert, welches sich dann auf dieses auswirkt. sind im Programm noch andere Units eingefügt oder nicht vorhanden und was ßassiert alles vorher (also bevor du dieses erzeugen willst) hast du es schonmal mit einen Owner versucht? (ich vermute jetzt einfach mal, daß man statt dem nil einen angeben könnte)
$2B or not $2B
|
Zitat |
Registriert seit: 18. Jan 2008 594 Beiträge |
#3
also ich habs auch schonal als erstes im on create ereignis erzeugt, und slesbt da spuckt es den Fehler aus.
Was den Owner betrifft, hatte ich die Frage bereits in einem anderen Beitrag gestell, und dort wurde gesagt es geht auch ohne! hat ja auch im anderen Programm funktioniert. Dies ist die UsesListe von meiner Hauptform:
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls, math, Grids, Menus, WININET, ComCtrls, Buttons, IdFTP, shellapi, jpeg, resample,SndKey32,mmsystem,TSRemoteImport, IdUDPServer, IdIPWatch, IdUDPBase, IdUDPClient,ScktComp,WinSock,IdSocketHandle,language,LiveTrack;
Marco Tröger
http://www.marcos-ivao-tools.net |
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |