Thema: Delphi Val und zuweisung

Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.648 Beiträge
 
Delphi 2007 Enterprise
 
#9

AW: Val und zuweisung

  Alt 12. Mai 2017, 00:06
Die Definition der Funktion Val() aus der Delphi-Doku: procedure Val(S; var V; var Code: Integer); Der Parameter "S", (sEnable bei dir) wird nicht als var-Parameter übergeben, und kann nachher nicht anders sein.

Zudem sehe ich noch ein Problem in deinem Code: Was machst du, wenn Errorpos <> 0 ist? Eigentlich müsste der Compiler warnen, dass EnableFlag undefiniert sein könnte. (Wenn wir hier den gesamten Code sehen.)

Delphi-Quellcode:
            sEnable := Trim(ParseThis(sBF, ',', 5));
            if Length(sEnable) = 0 then
              EnableFlag := 1 // Wenn Wert nicht gesetzt, 1 als Standard nehmen
            else
              VAL(sEnable, Int, Errorpos); // Wenn dennoch irgendwas im String ist, versuchen eine Zahl daraus zu lesen
            
            if Errorpos = 0 then
              EnableFlag := StrToInt(sEnable); // Wenn kein Fehler beim Interpretieren als Zahl war, umwandeln.
                                               // ABER! Unnötig. Die erkannte Zahl steht bereits in "Int" aus dem VAL()-Aufruf!
            // Vor allem aber: Was machst du, wenn Errorpos NICHT 0 ist, also KEINE Zahl erkannt wurde? Nichts! EnableFlag
            // wird nichts neues zugewiesen, es wird kein Fehler ausgelöst, nichts. Du machst einfach weiter unter der Annahme,
            // dass die Zahl richtig erkannt wurde. Was auch immer nachher in EnableFlag drin steht.
            //
            // Würde sEnable also in der ersten Zeile als '"2""' herauskommen, sollte Errorpos = 1 sein, und in EnableFlag steht
            // NUR DANN eine 2, wenn irgendwo vorher an einer anderen Stelle eine 2 rein geschrieben wurde. NUR dann. Step das mal durch.

            if EnableFlag = 2 then // RecycleBin
            begin
              sUseThumb := ExtractFilePath(sUseThumb);
              if SHGetRecycleBinCount > 0 then
              begin
                sUseThumb := sUseThumb + 'RecycleBinFull.png';
                gp.RecycleBinFull := true;
              end
              else
              begin
                sUseThumb := sUseThumb + 'RecycleBinEmpty.png';
                gp.RecycleBinFull := false;
              end;
            end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat