Moin Leute
Ich stelle gerade mein Programm von Turbo Pascal 7.0 auf Turbo Delphi um. Das Programm läuft dann als Console. Bei über 100.000 Zeilen kann ich nicht mal eben eine reine Formularanwendung draus machen. Als 32 Bit Console läuft das Teil dann auch auf XP 64 Bit, was einer 16 Bit Anwendung verwährt wird.
Komme ich zu meinem Problem.
Delphi-Quellcode:
type
TDirInfo =
object
DirInfo : SearchRec;
constructor Create( aDatei : PathStr;
aAttr : Word);
function FindNext:Boolean;
destructor Free;
end;
constructor TDirInfo.Create( aDatei : PathStr;
aAttr : Word);
{$IfDef Win32}
var
lEc : Int32;
{$EndIf}
begin
{$IfDef Win32}
lEc :=
FindFirst(aDatei,aAttr,DirInfo);
if lEc <> 0
then
begin
SysUtils.FindClose(DirInfo);
Fail;
end;
{$Else}
FindFirst(aDatei,aAttr,DirInfo);
if DosError <> 0
then
begin
{ FindClose wird bei Dos nicht benötigt }
Fail;
end;
{$EndIf}
end;
function TDirInfo.FindNext:Boolean;
{$IfDef Win32}
var
lEc : Int32;
{$EndIf}
begin
{$IfDef Win32}
lEc := SysUtils.FindNext(DirInfo);
FindNext := lEc = 0;
{$Else}
Dos.FindNext(DirInfo);
FindNext := DosError = 0;
{$EndIf}
end;
destructor TDirInfo.Free;
begin
{$IfDef Win32}
SysUtils.FindClose(DirInfo);
{$EndIf}
end;
Wenn
FindFirst keine Datei liefert, wird Fail aufgerufen. In dem Moment zerlegt sich mein Stack und ein folgender FillChar auf eine Variable von Record führt zum Speicherfehler.
Ich könnte wie folgt umstellen:
Delphi-Quellcode:
type
TDirInfo = object
DirInfo : SearchRec;
constructor Create;
function FindFirst( aDatei : PathStr;
aAttr : Word):Boolean;
function FindNext:Boolean;
destructor Free;
end;
Leider muss ich dann 38 Stellen in meinem Programm umstellen. Dazu kommen dann noch ein paar Objekte, die auch mit Fail enden, wenn eine Datei nicht geöffnet werden kann, etc. und das sind noch viel mehr Stellen.
Meine Frage: Kommt das wirklich vom Fail? Hat jemand von euch schon Erfahrungen damit gesammelt?
Stefan