Thema: Delphi Object und Fail

Einzelnen Beitrag anzeigen

Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#1

Object und Fail

  Alt 2. Feb 2010, 18:31
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
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat