Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   EConvertError "$" (https://www.delphipraxis.net/133108-econverterror-%24.html)

EWeiss 25. Apr 2009 19:33


EConvertError "$"
 
Ich bekomme diese Meldung seit 2009.

"$" ist kein gültiger integer wert.

Delphi-Quellcode:
var
GetSys : Integer;
...
GetSys := GetOperatingSystem;
Delphi-Quellcode:
unit uSysInfo;

interface
  uses windows, SysUtils, Messages ;

const
  { operating system (OS)constants }
  cOsUnknown = -1;
  cOsWin95 = 0;
  cOsWin98 = 1;
  cOsWin98SE = 2;
  cOsWinME = 3;
  cOsWinNT = 4;
  cOsWin2000 = 5;
  cOsXP = 6;
  cOsVista = 7;

function GetOperatingSystem: Integer;

implementation

function GetOperatingSystem: Integer;
var
  osVerInfo: TOSVersionInfo;
  majorVer, minorVer: Integer;
begin

  { set operating system type flag }
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  if GetVersionEx(osVerInfo) then
  begin
    majorVer := osVerInfo.dwMajorVersion;
    minorVer := osVerInfo.dwMinorVersion;
    case osVerInfo.dwPlatformId of
      VER_PLATFORM_WIN32_NT: { Windows NT/2000 } 
        begin
          if majorVer <= 4 then
            Result := cOsWinNT
          else if (majorVer = 5) and (minorVer = 0) then
            Result := cOsWin2000 
          else if (majorVer = 5) and (minorVer = 1) then
            Result := cOsXP
          else if (majorVer = 6) and (minorVer = 0) then
            Result := cOsVista
          else
            Result := cOsUnknown;
        end;
      VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
        begin
          if (majorVer = 4) and (minorVer = 0) then
            Result := cOsWin95
          else if (majorVer = 4) and (minorVer = 10) then
          begin
            if osVerInfo.szCSDVersion[1] = 'A' then
              Result := cOsWin98SE
            else
              Result := cOsWin98;
          end
          else if (majorVer = 4) and (minorVer = 90) then
            Result := cOsWinME
          else
            Result := cOsUnknown;
        end;
      else
        Result := cOsUnknown;
    end;
  end
  else
    Result := cOsUnknown;
end;

end.
Das problem hatte ich unter 2006 nicht
Kann mir jemand sagen wo das problem liegt ?

Kann da keinen Fehler entdecken.

gruss Emil

mjustin 25. Apr 2009 19:47

Re: EConvertError "$"
 
[quote="EWeiss"]Ich bekomme diese Meldung seit 2009.

"$" ist kein gültiger integer wert.

Delphi-Quellcode:
...
   VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
...

Delphi 2009 Anwendungen können auf diesen Windows Versionen nicht laufen.

Der Fehler kann also schon mal nicht in diesem Zweig stecken :)

Bis wo kommt man denn mit dem Debugger in der Funktion?


Edit: der Code gibt bei mir unter Windows XP den richtigen Wert (6) zurück, ohne Fehlermeldung.

EWeiss 25. Apr 2009 19:55

Re: EConvertError "$"
 
[quote="mjustin"]
Zitat:

Zitat von EWeiss
Ich bekomme diese Meldung seit 2009.

"$" ist kein gültiger integer wert.

Delphi-Quellcode:
...
   VER_PLATFORM_WIN32_WINDOWS: { Windows 9x/ME }
...

Delphi 2009 Anwendungen können auf diesen Windows Versionen nicht laufen.

Der Fehler kann also schon mal nicht in diesem Zweig stecken :)

Bis wo kommt man denn mit dem Debugger in der Funktion?


Edit: der Code gibt bei mir unter Windows XP den richtigen Wert (6) zurück, ohne Fehlermeldung.

Ja richtig deshalb wundert es mich das hier ein fehler auftritt.
Vorher hatte ich das problem nicht.

Muss nochmal genau debugen.
Hab vielleicht Scheuklappen vor den Augen (Bin nicht mehr der Jüngste) hehehehheee

gruss Emil

Muetze1 25. Apr 2009 23:31

Re: EConvertError "$"
 
Der Fehler muss woanders auftreten, da es hier kein StrToInt() Aufruf gibt.

Satty67 26. Apr 2009 08:40

Re: EConvertError "$"
 
Im Zweifel erst mal auf Unicode schieben und folgendes versuchen?
Delphi-Quellcode:
var
  osVerInfo: TOSVersionInfoA;
  majorVer, minorVer: Integer;
begin

  { set operating system type flag }
  osVerInfo.dwOSVersionInfoSize := SizeOf(TOSVersionInfoA);
  if GetVersionExA(osVerInfo) then

EWeiss 26. Apr 2009 09:37

Re: EConvertError "$"
 
Zitat:

Zitat von Muetze1
Der Fehler muss woanders auftreten, da es hier kein StrToInt() Aufruf gibt.

Ja danke. (Frage mich wir du erkannt hast das es um "StrToInt" geht ;)

Lag an anderer stelle und war ein problem mit UniCode

Delphi-Quellcode:
  for p := 0 to WStyleList.Count - 1 do
  begin
    x := pos(',', WStyleList.Strings[p]);
    WValue.Add(AnsiMidStr(WStyleList.Strings[p], x + 1,
      StrLen(PWideChar(WStyleList.Strings[p]))));
    WStyleList.Strings[p] := AnsiMidStr(WStyleList.Strings[p], 1, x - 1);
  end;
bei PAnsiChar kracht es da die nachfolgenden Buchstaben hinter ´
Delphi-Quellcode:
StrLen(PWideChar(WStyleList.Strings[p]))))
abgeschnitten werden.
Dann bleibt von
Delphi-Quellcode:
format('$%8.8x'
nur noch ein "$" übrig.

Bei der abfrage von wert
Delphi-Quellcode:
Ivalue := StrToInt(WValue.Strings[p]);
kracht es dann natürlich.

Seltsam aber das der Compiler in der zeile stehen bleibt
Delphi-Quellcode:
GetSys := GetOperatingSystem;
und nicht hier
Delphi-Quellcode:
Ivalue := StrToInt(WValue.Strings[p]);
in einer ganz anderen procedure wo der Fehler auftritt.
Und der witz die ist nicht mal in der gleichen Unit.

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:50 Uhr.

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