hin und wieder habe ich böse Abstürze mit meinem Programm unter Windows 7.
Nach nun einer viel zu langen Zeit habe ich endlich eine Sequenz gefunden, mit derer ich den Bug nachstellen kann.
Mein Programm konvertiert Strings in Floats ala
Code: Alles auswählen
f := strtofloat('1.0');
Natürlich habe ich im OnCreate ein
Code: Alles auswählen
FormatSettings.DecimalSeparator := '.';
Umstellen tue ich es nie mehr und doch bekomme ich nach einiger Nutzung immer eine AV nach dem Motto "1.0" is not a valid float.
Zum Nachstellen folgenden Code :
Code: Alles auswählen
Unit Unit1;
{$MODE objfpc}{$H+}
Interface
Uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
Type
{ TForm1 }
TForm1 = Class(TForm)
Button1: TButton;
Procedure Button1Click(Sender: TObject);
Procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
End;
Var
Form1: TForm1;
Implementation
{$R *.lfm}
{ TForm1 }
Procedure TForm1.FormCreate(Sender: TObject);
Begin
FormatSettings.DecimalSeparator := '.';
End;
Procedure TForm1.Button1Click(Sender: TObject);
Begin
showmessage('FS : ' + FormatSettings.DecimalSeparator);
End;
End.
Des weiteren habe ich ein Deutsches Windows7, das Lazarus Programm wurde kompiliert unter einem Deutschen WinXP (default separator ist dort ',')
Wenn ich nun das Programm starte bekomme ich erwartungsgemäß die Meldung "FS : .". Den Bug erzeugen kann ich, wenn ich mittels WIN+L den Rechner Sperre und mich dann wieder einlogge. Danach kommt die Meldung "FS : ,"
Lazarus SVN Revision war : 54278
FPC Version : 3.0.2
Kann das jemand erklären / Reproduzieren ?
Muss ich in Zukunft in meine Programme einen Event "OnRelogin" einbauen der den DecimalSeparator wieder korrigiert ? Wie löst ihr das ?
Ist das evtl doch ein BUG ?
Unter Linux habe ich den Bug nicht, allerdings sind alle meine Linuxe auch default auf Eng -> Damit ist der DecimalSeparator eh schon auf "."
[Edit]
Selber Fehler reproduzierbar mit Delphi XE10 kompiliert und getestet unter Windows 7