Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   FreePascal [gelöst] Lazarus: SaveToFile geht nicht (https://www.delphipraxis.net/183976-%5Bgeloest%5D-lazarus-savetofile-geht-nicht.html)

Kralle 17. Feb 2015 12:51


[gelöst] Lazarus: SaveToFile geht nicht
 
OS: Windows 8.1 Professional 64-Bit
Dateisystem: NTFS
IDE: Lazarus 1.2.6
FPC: 2.6.4

Moin,

wedwer das :
Delphi-Quellcode:
procedure TForm1.MenuItem5Click(Sender: TObject);
var tempstr: string;

begin

 if SaveDialog1.Execute then
 begin
      tempstr:=SaveDialog1.FileName;
      sl.SaveToFile(tempstr);
 end;
end;
noch das :
Delphi-Quellcode:
procedure TForm1.MenuItem5Click(Sender: TObject);

begin

 if SaveDialog1.Execute then
      sl.SaveToFile(SaveDialog1.FileName);
 end;
Funktionieren. Beim ersten steht der richtige Pfad beim Debug in der Variablen,
aber das Speichern führt bei beiden trotzdem zu der Meldung:

Zitat:

Projekt .. hat Exception-Klasse >>External: SIGGEGV<< ausgelöst. Bei Adresse 4441434C
Warum? Was läuft da falsch?

Gruß heiko

baumina 17. Feb 2015 13:00

AW: Lazarus: SaveToFile geht nicht
 
Was ist s1, wo wurde das kreiert?
Beim 2. Beispiel ist tempstr nicht zugewiesen.

DeddyH 17. Feb 2015 13:04

AW: Lazarus: SaveToFile geht nicht
 
Die nötigen Rechte sind aber vorhanden? Und wozu der temporäre String, sofern er nicht anderweitig noch gebraucht wird?
Delphi-Quellcode:
if SaveDialog1.Execute then
  sl.SaveToFile(SaveDialog1.Filename);

mjustin 17. Feb 2015 13:38

AW: Lazarus: SaveToFile geht nicht
 
SIGSEGV (segmentation violation) entspricht einer Access Violation (siehe http://en.wikipedia.org/wiki/Segmentation_fault).

Bei der Variablen sl (SL) handelt es sich dann vermutlich eine nicht instanziierte TStringList.

Kralle 17. Feb 2015 13:42

AW: Lazarus: SaveToFile geht nicht
 
Moin,

Zitat:

Zitat von baumina (Beitrag 1290186)
Was ist s1, wo wurde das kreiert?

sl ist eine StringList die Gobaldefiniert wurde und in Form.Create erzeugt wird.
Das Füllen der Liste funktioniert.
Zitat:

Zitat von baumina (Beitrag 1290186)
Beim 2. Beispiel ist tempstr nicht zugewiesen.

Tippfehler - berichtigt.

Kann es sein das es irgendein Problem mit den Zeichensätzen zwischen Lazarus/Free Pascal und Windows ist?

Gruß HEiko

BadenPower 17. Feb 2015 13:43

AW: Lazarus: SaveToFile geht nicht
 
Zitat:

Zitat von mjustin (Beitrag 1290196)
SIGSEGV (segmentation violation) entspricht einer Access Violation (siehe http://en.wikipedia.org/wiki/Segmentation_fault).

Bei der Variablen sl (SL) handelt es sich dann vermutlich eine nicht instanziierte TStringList.

Nicht nur vermutlich.

Die Fehlermeldung kommt, wenn auf ein Objekt zugegriffen werden soll, welches nicht erstellt wurde.

sl ist eine Stringlist (vergleiche andere Posts des TE), welche nicht erstellt wurde (also kein Create).


Zeig uns einmal die "FormCreate"-Procedure.

Kralle 17. Feb 2015 13:44

AW: Lazarus: SaveToFile geht nicht
 
Moin,

Zitat:

Zitat von DeddyH (Beitrag 1290187)
Die nötigen Rechte sind aber vorhanden?

Ja.

Zitat:

Zitat von DeddyH (Beitrag 1290187)
Und wozu der temporäre String, sofern er nicht anderweitig noch gebraucht wird?
Delphi-Quellcode:
if SaveDialog1.Execute then
  sl.SaveToFile(SaveDialog1.Filename);

Um zu sehen ob Filename irgendwelche "ulkigen" Zeichen aufgrund irgendwelcher Schriftsatzproblem enthält.

Gruß HEiko

DeddyH 17. Feb 2015 13:46

AW: Lazarus: SaveToFile geht nicht
 
Zeig mal mehr Code, das wird sonst ein lustiges Rätselraten. Die Stringliste existiert zu diesem Zeitpunkt auf jeden Fall, oder wird sie ggf. vor dem FormDestroy wieder freigegeben?

mjustin 17. Feb 2015 13:46

AW: Lazarus: SaveToFile geht nicht
 
Zitat:

Zitat von Kralle (Beitrag 1290198)
sl ist eine StringList die Gobaldefiniert wurde und in Form.Create erzeugt wird.
Das Füllen der Liste funktioniert.

Wird der richtige Inhalt der StringList im Debugger angezeigt bevor der SaveToFile Aufruf stattfindet?

Kralle 17. Feb 2015 13:47

AW: Lazarus: SaveToFile geht nicht
 
Mpoin,

Zitat:

Zitat von mjustin (Beitrag 1290196)
SIGSEGV (segmentation violation) entspricht einer Access Violation (siehe http://en.wikipedia.org/wiki/Segmentation_fault).

Bei der Variablen sl (SL) handelt es sich dann vermutlich eine nicht instanziierte TStringList.

Also, sl ist eine StringList und ja sie ist instanziiert, sonst könnte ich sie ja nicht mit Inhalten zur Laufzeit befüllen oder?

Delphi-Quellcode:
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;
  sl: TStringList;
implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
   sl:= TStringList.Create;
end;
Gruß HEiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.
Seite 1 von 3  1 23      

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