Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi INIFile.ReadSections führt zum Abstrakten Fehler (https://www.delphipraxis.net/101590-inifile-readsections-fuehrt-zum-abstrakten-fehler.html)

Daniel Schuhmann 16. Okt 2007 13:07

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Zitat:

Zitat von winkel79
Und du bist sicher, daß er die INI findet?

Selbst wenn er sie nicht findet, darf es nicht "knallen", die Stringliste wäre einfach nur leer.

Progman 16. Okt 2007 13:10

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
wenn er sie nicht findet, kommts zum Crash in der ntdll.dll, jedenfalls meistens ;)

RavenIV 16. Okt 2007 13:10

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Zitat:

Zitat von Progman
RavenIV: stimmt, das kann zum crash führen.
Kommentare in Ini's nur mit ; am Anfang einer Zeile, das wird akzeptiert.

Stimmt, ich glaube, ich hatte das mit
Zitat:

Groesse=100 ; dies ist die Grösse des Fensters,
die am Anfang gesetzt wird
geschrieben.

Daniel Schuhmann 16. Okt 2007 13:25

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Zitat:

Zitat von Progman
wenn er sie nicht findet, kommts zum Crash in der ntdll.dll, jedenfalls meistens ;)

Nein, beim Lesen nicht, nur beim Schreiben.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
  SL: TStringList;
begin
  Ini := TIniFile.Create('NUL');
  SL := TStringList.Create;
  Ini.ReadSections(SL);
  SL.Free;
  Ini.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create('NUL');
  Ini.WriteString('Test', 'Test1', 'Val1');
  Ini.Free;
end;
Nur bei der Schreibroutine kracht es. Wenn beim Lesen ein Fehler auftritt, wird der Standardwert angenommen.

Progman 16. Okt 2007 13:45

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Ok, stimmt, hast recht ;)

gmc616 18. Okt 2007 22:34

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Also, ich hab keine Ahnung was der Grund für den Fehler ist.

Es hat sich allerdings heraus gestellt, dass mein BDS generell Probleme mit TStringlists bzw. TStrings zu haben scheint. Einige meiner Programme machen plötzlich Probleme wenn ich sie mit dem z.Z. installierten BDS compiliere. Immer wieder stürzen sporadisch die Anwendenung ab, wenn ich z.B. Dateien in TStringlisten laden. Der gleiche Code auf einem anderen Rechner mit D7 compiliert, funzt problemlos.

komisch komisch ... :gruebel:

Ich werd mal das BDS platt machen und Neuinstallieren. Mal sehn obs was hilft ... :coder2:

Danke an alle

:hi: gmc

ulhau 19. Okt 2007 02:46

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Guten Morgen gmc616!

Ehe du dein BDS platt machst, probiere doch mal das kompilierte Programm (die StringListvariante)ohne IDE auszuführen. Manchmal macht Inifiles so seltsame Sachen wenn das Programm innerhalb der IDE getestet wird. Aber bei der Ausführung ohne IDE gibt es dann meistens keine Probleme mehr.

Jedenfalls die Stringlistvariante hat keine Probleme gemacht als ich das Programm standalone ausgeführt habe, obwohl die gleichen Fehler beim ausführen innerhalb der IDE wie bei dir aufgetreten sind. (Die Ini war natürlich eine andere.)

Tschüssss

SM3D 16. Jul 2009 02:25

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Zitat:

Zitat von gmc616
Namd DP,

ich glaub ich werd bekloppt!

Könnt ihr mir verraten warum dieser Code zu einem Abstrakten Fehler führt? (BDS2006)

Delphi-Quellcode:

uses IniFiles;

[...]

procedure TForm1.Button1Click(Sender: TObject);
var
  MyIni : TIniFile;
  MySections : TStrings;
  I: Integer;
begin
  MySections := TStrings.Create;
  MyIni := TIniFile.Create(ChangeFileExt (Application.ExeName,'.ini'));

  MyIni.ReadSections(MySections); // <-- Hier knallts !!

  for I := 0 to MySections.count - 1 do
    ShowMessage (MySections.Strings[i]);

  MySections.Free;
  MyIni.Free;

end;
Isses schon so spät, dass ich's nicht sehe??

Danke und Grüße
gmc

Grüsse,

ich würde es mal mit
Delphi-Quellcode:
MySections := TStringList.Create;
statt mit
Delphi-Quellcode:
MySections := TStrings.Create;
probieren, hab Dein Beispiel nachgestellt und eins A geklappt, mit Deinem Code kommt Abstrakten Fehler, wenn Du Mein Beispiel nimmst kommen in ner MessageBox die Sections ;)

MfG SM3D

Muetze1 16. Jul 2009 09:06

Re: INIFile.ReadSections führt zum Abstrakten Fehler
 
Zitat:

Zitat von Daniel Schuhmann
Zitat:

Zitat von Progman
wenn er sie nicht findet, kommts zum Crash in der ntdll.dll, jedenfalls meistens ;)

Nein, beim Lesen nicht, nur beim Schreiben.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Ini: TIniFile;
  SL: TStringList;
begin
  Ini := TIniFile.Create('NUL');
  SL := TStringList.Create;
  Ini.ReadSections(SL);
  SL.Free;
  Ini.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create('NUL');
  Ini.WriteString('Test', 'Test1', 'Val1');
  Ini.Free;
end;
Nur bei der Schreibroutine kracht es. Wenn beim Lesen ein Fehler auftritt, wird der Standardwert angenommen.

Also wer auch einen illegalen und verbotenen Dateinamen verwendet, da ist es kein Wunder das es kracht. Afaik sollte es sogar hier durch den Dateinamen bei beiden Aufrufen knallen.

Siehe auch MSDN: File Names, Paths, and Namespaces dort unter Basic Naming Conventions. Warum sollte jedem DOS/Shell Nutzer bekannt sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz