Problem mit Registry.ReadFloat

Antworten
Ally
Beiträge: 160
Registriert: Do 11. Jun 2009, 09:25
OS, Lazarus, FPC: Win und Lazarus Stable release
CPU-Target: 32 und 64 Bit

Problem mit Registry.ReadFloat

Beitrag von Ally »

Hallo,

für das Schreiben und Lesen von Registry-Werten habe ich mir einige Functionen geschrieben, die unter Windows tadellos funktionieren.
Unter Linux(Mint 32 Bit)-Lazarus 2.0.2 gibt es allerdings ein Problem mit ReadFloat, das mit "External: SIGSEGV" endet.
Das Schreiben mit WriteFloat funktioniert. Der Wert der anschließend in der Windows-Registry bzw. der Linux-Datei reg.xml steht ist identisch und lautet 000000000000F03F für die Zahl 1.
Das Lesen von z.B. Integer- oder String-Werten funktioniert auch unter Linux wie erwartet.
Versuche mit geändertem DezimalSeparator führten auch nicht zum gewünschten Ergebnis.

Code: Alles auswählen

function ReadRegFloat(RegPfad: String; Key: String; Default: Double = 0): Double;
var
  Regi: TRegistry;
begin
  try
    Regi := TRegistry.Create;
    Regi.RootKey := HKEY_CURRENT_USER;
    Regi.OpenKeyReadOnly(UTF8ToWinCP(RegPfad));
    if Regi.ValueExists(UTF8ToWinCP(Key)) then
      Result := Regi.ReadFloat(UTF8ToWinCP(Key)) //endet unter Linux mit "External: SIGSEGV"
    else
      Result := Default;
  finally
    Regi.Free;
  end;
end;

Antworten