Hallo @ all, ich hab mal wieder sonderbare Probleme.
Ich habe eine Klasse TDataFile mit drei verschiedenen Konstruktoren.
Diese Klasse hat zwei Boolean-Felder, zum einen loadState, zum anderen lockState.
Beide werden im "Basis-Konstruktor" auf false gesetzt.
Wie man im Code sehen kann, greift der spezialisierte Konstruktor auf den normalen zu, lässt die Grundeinstellungen festlegen.
Später soll die Klasse dann den Stream sowie den Dateinamen laden, was der erweiterte Konstruktor dann macht.
Delphi-Quellcode:
constructor TDataFile.Create;
begin
inherited;
loadState := false; //Hier krachts
lockState := false;
Data := TMemoryStream.Create;
fName := '';
fSize := 0;
end;
constructor TDataFile.Create(stream : TMemoryStream; sfName : string; var stateMessage : byte);
begin
Create;
try
Data.Free;
Data := stream;
fSize := Data.Size;
fName := sfName;
loadState := true;
stateMessage := 0;
except
loadState := false;
Data := TMemoryStream.Create;
fName := '';
fsize := 0;
stateMessage := 2;
end;
end;
So, nun das Problem: In der Zeile
loadState := false;
kassiere ich eine
Exception:
Erste Zufalls-
Exception bei $7C81EB33.
Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004C7EB9 in Modul 'Nicht wichtig.exe'. Schreiben von Adresse 00000008'. Prozess Nicht wichtig.exe (2704)
Wie kann das sein? Ich greife doch nur auf das eigene Boolean-Feld zu. Der inherited-Konstruktor wurde auch schon aufgerufen, also sollten die Felder ausgerichtet sein ...
Ein inherited Create bringt auch nichts, ebensowenig das Kopieren des Codes von Create nach Create(...)+ändern der Zeile inherited; nach inherited Create;
Hier noch der Klassenkopf:
Delphi-Quellcode:
type TDataFile = class(TObject)
protected
var Data : TMemoryStream;
var loadState, lockState : boolean;
var fName : string;
var fSize : longword;
procedure doUnlock;
public
property loaded : boolean read loadState;
property Name : string read fName;
property Size : longword read fSize;
constructor Create; overload;
constructor Create(stream : TMemoryStream; sfName : string; var stateMessage : byte); overload;
constructor Create(pfad : string; var stateMessage : byte); overload;
destructor Destroy; override;
function getStreamP(var unlocker : TPUnlock) : TMemoryStream; overload;
function getStreamP(var stateMessage : byte; var unlocker : TPUnlock) : TMemoryStream; overload;
function loadFromFile(pfad : string) : byte;
function saveToFile(pfad : string) : byte;
function close : byte;
Vielen Dank schon im Voraus für eure Hilfe!
mfG
Markus