Try und catch mit CTime funktioniert nicht
-
Hallo,
ich habe eine kleine Routine der ich ein Datum übergebe und die mir das alter zu Heute in Tagen liefert. Wenn die Eingabe nun falsch ist, so stürzt CTime mit einer Exception ab. Ich bekomme es aber nicht hin das mit try und catch abzufangen und finde auch bei google nichts.
Hat Jemand eine Idee?Stefan
_Datestring = "20090813" ok
_Datestring = "20090899" crashCTime mailDownloadDate; SYSTEMTIME mailDownloadDate2; mailDownloadDate2.wYear = atoi(_Datestring.Left(4)); mailDownloadDate2.wMonth = atoi(_Datestring.Mid(4,2)); mailDownloadDate2.wDay = atoi(_Datestring.Mid(6,2)); try { mailDownloadDate = mailDownloadDate2; CTimeSpan ageInDays = CTime::GetCurrentTime() - mailDownloadDate; return (int) ageInDays.GetDays(); } catch ( CException * e ) { // Handle the exception e->Delete(); return 0; }
-
probier mal catch(...)
Springt er dann an bei ner Fehleingabe ?
-
R3dNeXX schrieb:
probier mal catch(...)
??? wie meinen?
Ich muss doch try und catch verwenden? oder soll ich was anderes als CException catchen? aber was?
Stefan
-
StefanKittel schrieb:
aber was?
... !?
-
aber was = ich könnte ja nach einer anderen exception suchen außer CException. Aber ich weiß nicht welche. Ich habe schon mehrere probiert, aber aber es kommt immer der Laufzeitfehler.
Stefan
-
Die drei ... sind kein Platzhalter für einen Namen den dir nur keiner sagen will.
-
Dies wurde mir von Tommix in einem anderen Forum mitgeteilt und löst das Problem:
CStringA _Datestring = "20090899"; COleDateTime mailDownloadDate; SYSTEMTIME mailDownloadDate2; memset(&mailDownloadDate2, 0, sizeof(SYSTEMTIME)); // .wHour usw. = 0; mailDownloadDate2.wYear = atoi(_Datestring.Left(4)); mailDownloadDate2.wMonth = atoi(_Datestring.Mid(4,2)); mailDownloadDate2.wDay = atoi(_Datestring.Mid(6,2)); try { mailDownloadDate = mailDownloadDate2; if (mailDownloadDate.GetStatus() != COleDateTime::valid) throw "error"; COleDateTimeSpan ageInDays = COleDateTime::GetCurrentTime() - mailDownloadDate; return (int) ageInDays.GetDays(); } catch (char const*) { // Handle the exception return 0; }
-
TriplePoint schrieb:
Die drei ... sind kein Platzhalter für einen Namen den dir nur keiner sagen will.
Im Klartext: so ein Konstrukt
try { //... }catch(...) { //... }ist syntaktisch korrekt. Da sollst du also nix einsetzen.
Hier werden einfach alle Exceptions behandelt.
-
...hat in C++ sogar einen Namen: ellipsis.
-
@StefanKittel:
war etwas blöd formuliert, habe damit so eine Ellipse gemeint.Musst mal noch verraten, ob er bei dann dadurch anspringt...
-
Hallo,
ich hab das und noch ganz viel anderes ausprobiert. Keine Exception funktioniert mit CTime. Kann das Sein dass MS das einfach vergessen hat?
Stefan
-
In meiner MSDN steht dazu bei CTime:
It is your responsibility to validate the arguments prior to calling.
-
Dann brauch ich nur noch ne Routine um Schalttage berechnen zu können. Da stürzt CTime nämlich auch ab

-
Wenn du nicht an CTime gebunden bist, könntest du einfach COleDateTime benutzen und davon SetDate(...), der sagt dir dann schon, ob das gültig ist oder nicht.
-
isabeau schrieb:
Wenn du nicht an CTime gebunden bist, könntest du einfach COleDateTime benutzen und davon SetDate(...), der sagt dir dann schon, ob das gültig ist oder nicht.
Hallo,
siehe 1. Seite. Das mach ich schon. Ich fand es nur komisch, dass MS hier die exception scheinbar vergessen hat.
-
[quote="StefanKittel"]
isabeau schrieb:
Ich fand es nur komisch, dass MS hier die exception scheinbar vergessen hat.
CTime ist eine gemeinsame Klasse von MFC und ATL. Eine CException* käme in der ATL nicht gut an.