Error-MessageBoxe ausschalten?
-
Hallo! Ich habe hier ein ziemlich nerviges Problem: Ich habe mit BCB 6 ein Windows-Programm kompiliert, das die folgende Zeile enthaelt: a = log(b);
Jedes Mal, wenn das Programm ueber diese Zeile laeuft und b <=0 ist, taucht ein MessageBox mit der Fehlermeldung "Domain-Error!" auf. Erzeuge ich dagegen ein Konsolenprogramm mit BCB6, so taucht die Fehlermeldung nie auf. Kann mir einer sagen, warum dies so ist und wie ich die Fehlermeldungen in Windowsprogrammen ausschalten koennte?
-
if(a>0)
a = log(b);
-
Ich meinte eigentlich, ob es moeglich sei, die Fehlermeldung zu unterdruecken, auch wenn das Programm durch die fragliche Zeile laeuft. Beim Konsolenprogramm taucht sie ja nie auf, auch wenn das Programm eine unerlaubte arithmetische Operation durchfuehrt.
-
Du solltest schon vor arithmetische Operation so ein paar rudimentäre Prüfungen durchführen wie auch Division durch Null usw.
-
Du kannst sie auch explizit mit try...catch abfangen, z.B.
try { a = log(b); } catch(Exception &) { // tue nichts... }
-
Ich stimme erst mal "Christian211" zu. Ausserdem sollte man auch noch zusätzlich mit dem Gedanken spielen, zusätzlich jede Methode und Funktion mit min. einem try/catch abzusichern. Vorausgesetzt du möchtest sichere Anwendungen schreiben. Solltest du auch noch Multithreading verwenden empfehle ich noch CriticalSections, siehe http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/initializecriticalsection.asp
-
Hallo,
Einen Over-oder Underflow bei log kann man aber nicht mit try/catch abfangen. Dazu mußt man einen Errorhandler (_matherr) einfügen.
Siehe auch FAQ
-
Genau! Und eine entsprechende VCL-Funktion, die die Exception ausloest, gibt es nicht.
-
Hi
Versuche es hiermit:
Du fügt die Komponente ApplicationEvents zu Deinem Projekt hinzu und erstellt für das Ereignis OnException einer Handler in dem Du nur irgendein Kommentar schreiben musst, dass er bei der Compilierung nicht entfernt wird.Weiterhin werden bei Borland die Fehler immer angezeigt; Du musst das Programm direkt z.B. über den Explorer aufrufen.
Zu empfehlen ist aber auf alle Fälle den Code mit try abzusichern!!!
-
anonym:
Hast du dir eigentlich die anderen Beiträge hier durchgelesen, insbesondere den von Braunstein? Oder deinen Vorschlag mal mit den Vorgaben des ursprünglichen Beitrages ausprobiert?Math exceptions lassen sich mit herkömmlichen Mitteln nicht abfangen.