Beispiele zum Exception Handling
-
Hallo,
Ich habe sowas noch nie gemacht und schnalle irgendwie auch nicht so richtig wie das funktioniert.
Bei TRY wird etwas ausgeführt und bei CATCH die Exception gefangen... Wenn ich jetzt eine Exception habe und THROW mache, wo wird die dann angezeit? Gibts ein Popup Dialog?
Ich wäre über ein paar Beispiele oder ein paar guten Links sehr froh.
Danke
-
schau dir die CFile beispiele an, die benutzen exceptions
z.b.char* pFileName = "test.dat"; TRY { CFile::Remove( pFileName ); } CATCH( CFileException, e ) { #ifdef _DEBUG afxDump << "File " << pFileName << " cannot be removed\n"; #endif } END_CATCHwas deine frage betrifft
wenn du throw machst landest du im catch bereich... es liegt an dir ob du den fehler per msgbox ausgibst
-
Danke erstmals, ich werde es mir genauer anschauen, aber etwas geht mir einfach nicht in den Kopf....
Früher hat man doch wenn eine Fehler auftrat eine Ausgabe von diesem Fehler gemacht und man wusste was falsch war.
Nun bei Exceptions, mache ich einen Throw wenn ein Fehler auftritt und fange ihn auf, aber was nützt mir das wenn ich ihn z.B. nicht ausgebe... das wird der TRY Block nicht ausgeführt und ich werde auf den Fehler gar nicht aufmerksam.... und wenn ich ihn ausgebe, dann ist es genauso wie ohne Exception... If (not) AfxMessageBox oder so.
Ich meine, ich fange ja nicht nur eine Exception auf sondern überall dort wo Fehler enstehen... Was kann alleine das Auffangen nützen wenn man es nicht ausgibt?
-
also ich glaub mal das dein programm nichts "abstuerzt"
ich trace von einer externen hardware ( und der entsprechenen hersteller dll ) nachrichten.
da habe ich eine lange fkt dafuer.
wenn ein fehler auftritt in dieser fkt.
dann "stuerzt" die dll bei mir ab.
sprich die externe hardware kann ich nicht ueber meinen PC ansprechen.
dann kann ich den dienst neu starten, oder rechner hochfahren

mit hilfe der exeption ( mit oder ohne fehlerausgabe )
passiert das nicht und ich muss nicht den rechner neu starten. und kann weiter testen und die fkt verbesssern.
aber ich hoffe einige "profis" koennen da mehr sagen.
ich werfe deswegen immer exeptions wenn es um was "externes" geht.
z.b. zugriff auf files ( lesen oder schreiben ) ect.
natuerlich kann man das auch machen wenn man z.b. in einem array auf einen bereich zugreifen will den es nicht gibt. z.b. array[100] aber ich greife auf array[3000] zu. so gibt es da nicht die ueblen speichergriffsverletzungen.
bitte korigiert mich wenn ich falsch liege.
was ich nicht verstehe.
manche machen ja
... ... if( pos <= maxarraygroesse ) int i = array[pos]; // so jetzt machen da einige leute die if abfrage in einem try block. warum aber?? //da kann doch sogesehen nichts schief laufen, da ich ja mit if schon abfrage. hmmm
-
mir fehlt da wohl noch der grosse AHA effekt
