Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variant Problem... (https://www.delphipraxis.net/37717-variant-problem.html)

faux 9. Jan 2005 12:41


Variant Problem...
 
Hallo!

Ich hab folgende Prozedur:

Delphi-Quellcode:
function StrToKey(var AString: Variant): boolean;
begin
  result := false;
  if AString = 'HKCU' then
  begin
    AString := HKEY_CURRENT_USER;
    result := true;
  end;
  if AString = 'HKLM' then
  begin
    AString := HKEY_LOCAL_MACHINE;
    result := true;
  end;
  if AString = 'HKU' then
  begin
    AString := HKEY_USERS;
    result := true;
  end;
  if AString = 'HKCC' then
  begin
    AString := HKEY_CURRENT_CONFIG;
    result := true;
  end;
  if AString = 'HKCR' then
  begin
    AString := HKEY_CLASSES_ROOT;
    result := true;
  end;
end;
Es wird ein String übergeben und sollte ein Double zurück kommen.
Nur kommt immer eine Fehlermeldung, dass ein Fehler beim konvertieren auftrat... :gruebel:

Stevie 11. Jan 2005 09:08

Re: Variant Problem...
 
Hi faux,

ein Blick in den Debugger wird dir zeigen, dass die Fehlermeldung dann auftritt, wenn du bereits einen Double-Wert in deine Variable eingetragen hast und dann die nächste if-Abfrage aufgerufen wird. Dort wird nämlich versucht, ein Double-Wert mit einem String zu vergleichen und das kracht! Deshalb nach jeden result := true ein exit! Möglich wäre auch ein VarToStr(AString) = ... aber das ist mit Sicherheit langsamer.

MfG
Stevie

Sourcemaker 11. Jan 2005 09:45

Re: Variant Problem...
 
Oder so:

Delphi-Quellcode:
function StrToKey(var AString: Variant): boolean;
begin
  result := false;
  if AString = 'HKCU' then
  begin
    AString := HKEY_CURRENT_USER;
    result := true;
  end
  else if AString = 'HKLM' then
  begin
    AString := HKEY_LOCAL_MACHINE;
    result := true;
  end
  else if AString = 'HKU' then
  begin
    AString := HKEY_USERS;
    result := true;
  end
  else if AString = 'HKCC' then
  begin
    AString := HKEY_CURRENT_CONFIG;
    result := true;
  end
  else if AString = 'HKCR' then
  begin
    AString := HKEY_CLASSES_ROOT;
    result := true;
  end;
end;
Grüße

Frank

DP-Maintenance 11. Jan 2005 11:24

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "VCL-Komponenten und Controls" nach "Sonstige Fragen zu Delphi" verschoben.
Wo ist denn da die Datenbankfrage? ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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