breezen - Di 15.11.05 17:11
Titel: Merkwürdiges Verhalten von Variants...
Hallo
Also, ich schreibe gerade ein Programm, in dem oft der Typ Variant vorkommt.
Nun bin ich auf einen ganz merkwürdiges Verhalten gestossen, welches mir gar nicht passt.
Folgender Code löst eine Exception vom Typ EVariantOverflowError mit der Meldung "Overflow while converting variant of type (Double) into type (Integer)." aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var A, B: Variant; begin A := 0; B := 0; while (A < 100000) do begin Inc(A); B := B + A; end; ShowMessage(VarTypeAsText(VarType(B))); ShowMessage(IntToStr(B)); |
Das Resultat der Berechnung "B + A" ist vom Typ Double, sobald das Ergebnis keinen Platz mehr in einem Integer hat.
Wenn ich den Code nun wie folgt ändere (beachte die Berechnung):
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ... while (A < 100000) do begin Inc(A); B := Integer(B) + Integer(A); end; ... |
Dann ist auch das Resultat zwingend ein Integer und der Fehler tritt nicht mehr auf.
Leider kann ich das in meinem Programm nicht so einfach lösen, weil die Typen unvorhersehbar sind.
Gibt es irgendeine Möglichkeit, das Verhalten der Variants zu beeinflussen? Ich weiss mir leider im Moment überhaupt nicht zu helfen... :(
Gruss und Danke
Breezen
breezen - Di 15.11.05 18:28
Titel: Danke
Hi
Danke für deine Antwort.
Das Problem ist eben, dass ich eine eigene ScriptSprache entwickle, inspiriert von den TDelphiWebScript-Komponenten von
http://www.dwscript.com .
Intern arbeitet die ScriptSprache mit Variants, allerdings ist sie nach Aussen vollständig typisiert (meine Version jedenfalls, die von dwscript.com leider nicht)! Ich konnte das Problem jetzt lösen, indem ich die verschiedenen Möglichkeiten berücksichtige und dann per If-Statement entsprechende Casts durchfüre. Allerdings bremst das den Interpreter leider etwas aus...
Aber naja, man kann halt nicht alles haben... :)
Gruss Breezen