Vor kurzem ist es mir passiert, dass ich bei einer Wertzuweisung an einen Long-Datentyp den "Fehler 6 - Überlauf" bekam, obwohl der Wert noch lange nicht die Grenzen des Long-Datentyps sprengen würde. Konkret sollte der User eine Zeit einstellen können, nach der Nachrichten im E-Mail Programm autom. als gelesen gekennzeichnet werden sollen. Die Zeitspanne kann der User im Bereich zwischen 0 und 60 Sekunden festlegen. Für das autom. Kennzeichnen der Nachricht mit dem Status "Gelesen" wird ein Timer eingesetzt. Der vom User festgelegte Wert muss für das korrekte Arbeiten des Timers mit dem Faktor 1000 multipliziert werden, da das Timer-Control die Interval-Eigenschaft in Millisekunden erwartet. Der verwendete Code sah wie folgt aus: Option Explicit Dim nTimeAutoRead As Integer ... ' vom User festgelegte Zeit aus INI-Datei auslesen nTimeAutoRead = GetIniInt("eMail", "Vorschauzeit", "10", sIniFile) ... ' Timer-Interval einstellen (Zeit in Millisekunden!) Timer1.Interval = nTimeAutoRead * 1000 Das ganze funktionierte prima, bis ein User auf die Idee kam, die Zeit auf 60 Sekunden festzulegen. Normalerweise ja kein Problem, da die Interval-Eigenschaft des Timers Werte bis 65535 aufnehmen kann und die eingestellte Zeit von 60 Sekunden ja mit 60000 Millisekunden noch unter dem max. zulässigen Wert von 65535 liegt. Nur was geschah? Timer1.Interval = nTimeAutoRead * 1000 Nur warum? VB verarbeitet hier aber scheinbar die Multiplikation als INTEGER-Multiplikation, die somit ab dem Wert 33 (33 * 1000 = 33000) zu dem Überlauf führt. Abhilfe schafft hier nur das explizite Umwandeln der Integer-Variable in den Long-Datentyp, wie nachfolgend gezeigt: Timer1.Interval = CLng(nTimeAutoRead) * 1000 Alternativ kann man die Variable nTimeAutoRead auch gleich als LONG deklarieren statt INTEGER. Dieser Tipp wurde bereits 9.990 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |