Delphi: AssignFile



  • Hi,

    ich muss (wegen Schule) was in Delphi schreiben. Nun komme ich aber wohl nicht so recht mit dem Debugger von Delphi 4 klar (oder wie kann es sonst kommen, dass ich zu einer Exception keine genaueren Daten bekomme, weshalb die ausgelöst wurde?).

    Naja, jedenfalls tritt immer eine Zugriffsverletzung auf, wenn ich die Prozedur AssignFile benutze:

    TConfigValue = Record
        ConfigTyp   : TConfigTyp;
          Value       : boolean;
       end;
    //...
    ConfigFile : File of TConfigValue;
    
    //...
    
    AssignFile(ConfigFile, 'config.dat');
    

    Jemand eine Ahnung, worans liegt (meinen Lehrer brauche ich gar nicht erst Fragen, weiß der sowieso nicht).



  • Bitte mehr infos, was ist z.B. TConfigTyp?

    Zu den Debugger: Du kannst ja Breakpoints setzen (links auf die Leiste beim Code clicken dann dürfte ein roter Punkt erscheien) und dich dann vorarbeiten.



  • Ja, das mit den Brakepoints hatte ich auch schon rausgefunden (weil ich intuitv erstmal F5 gedrückt habe um es ausführen zu lassen). Jedoch nutzt mir das sehr wenig. Ich habe eben damit rausgefunden, dass es die AssignFile Funktion ist. Aber wie komme ich sonst an Informationen, woran es liegen könnte?

    Oh, sorry, das habe ich vergessen:

    const Filename = 'config.dat';
    
    type
        TConfigTyp = (OpenProjectOnStart, AutomaticSave, StopOnAway);
    
       TConfigValue = Record
        ConfigTyp   : TConfigTyp;
          Value       : boolean;
       end;
    
        TProgramConfig = class
            ConfigData : Array[0..10] of boolean;
    
            ConfigFile              : File of TConfigValue;
        public
            procedure LoadConfig;
             procedure SaveConfig;
    
             procedure SetConfig(Typ : TConfigTyp; Status : boolean);
                function  GetConfig(Typ : TConfigTyp) : boolean;
    
        end;
    
    implementation
    
    procedure TProgramConfig.LoadConfig;
    Var
        CurrentConfig : TConfigValue;
    Begin
        AssignFile(ConfigFile, 'config.dat');
    


  • Vermutung: ConfigFile ist bei dir eine Eigenschaft von TProgramConfig.
    Dadurch, dass du ConfigFile mehrfach verwendest, kann es zu einem
    Fehler kommen, wenn du die Datei nicht wieder schließt. Oder einfach so.
    Delphi ist bei sowas manchmal etwas eigen. Mach aus ConfigFile lokale Varsiablen,
    die in jeder Methode neu deklarierst, dann könnte es den Fehler aus der Welt schaffen.



  • Gut mache ich mal, brauche ich ja eh eigentlich nicht in der Klasse.

    Ansonsten hätte ich mal die WinAPI Funktionen dafür benutzt.



  • Danke das funktioniert. Nur jetzt habe ich das gleiche Problem mit einer anderen Membervariable.

    Muss ich die Klassen irgendwie erzeugen? Mit new oder so?



  • Mit create:

    var
      Klasse: TMeineKlasse;
    begin
      Klasse := TMeineKlasse.Create;
      try
        ...;
        ...;
      finaly
        Klasse.Free;
      end;
    end;
    


  • Tja, wenn man sich alles selbst erarbeiten muss (weil der Lehrer zu dumm ist).

    Naja, Danke jedenfalls.



  • Ein Tipp: Merk dir, dass du 1. Konstruktor/Destruktor in Delphi immer
    selbst ausführen musst und 2. dass alle Instanzen von Klassen (in Delphi)
    in wirklichkeit Pointer sind, die auf die Instanzen zeigen.
    Dann wird einihes der seltsamen Delphiwelt klarer


Anmelden zum Antworten