Eurekalog - Wer kennt sich aus?



  • ich möchte eine exception abfangen und eine beliebige nachricht mit der original exception ausgeben. ich dachte das so:

    void __fastcall TMain::EurekaLogExceptionNotify(
    TEurekaExceptionRecord &EurekaExceptionRecord, bool &Handled)
    {
    Exception *Error = Exception(EurekaExceptionRecord.ExceptionObject);
    if(Error != NULL)
    {
    MessageBox(NULL,Error->Message.c_str(),"",48);
    }
    }

    die beispiele aus der eurekalog hilfe sind ald in delphi..



  • oder eine andere frage...

    wie kann ich rausfinden um welchen typ exception es sich handelt? nehmen wir als beispiel mal ESocketError. wie kann ich nun rausfinden ob es diese exception war? sowas wie:

    Exception *Error = Exception(ESocketError);
        if(Error != NULL)
        {
        	//ja das war sie....
        }
    

    geht sowas? wenn ja wie richtig? jedoch ohne try/catch block...



  • ah habs...

    Exception *Error = dynamic_cast<Exception*>(EurekaExceptionRecord.ExceptionObject);
    	if(Error && Error->ClassNameIs("ESocketError"))
        {
    		//ja das war sie...
        }
    

    oder gibts da was auszusetze? 🙄



  • Hallo

    wenn ja wie richtig? jedoch ohne try/catch block

    Warum ohne Try-Catch? Genau dafür ist es doch zuständig :

    try
    {
      // Auslösender Code
      }
    catch (TSocketError &Exception)
    {
      //ja das war sie....
      }
    

    Wahrscheinlich hast du falsche Vorstellungen von Exceptions, und dein Konzept passt nicht zu den Mitteln (Exceptions), die du dafür einsetzen willst.

    /Edit : Fehler berichtigt

    bis bald
    akari



  • Heureka schrieb:

    ah habs...

    Exception *Error = dynamic_cast<Exception*>(EurekaExceptionRecord.ExceptionObject);
    	if(Error && Error->ClassNameIs("ESocketError"))
        {
    		//ja das war sie...
        }
    

    oder gibts da was auszusetze? 🙄

    Als Ergänzung :

    if(Error)
    

    reicht.

    bis bald
    akari



  • hallo akari! danke für dein posting 😋
    du hast schon recht mit dem try/catch, habe ich früher auch angewendet. jedoch ist EurekaLog was feines. kennst du es? wenn nicht, teste es mal und du wirst verstehen warum ich keine try/catch blöcke mehr einsetze bzw. selten.

    Als Ergänzung :
    [....]
    reicht

    jein würde ich sagen. mit if(Error) frage ich ja nur ab ob der zeiger nicht NULL ist, der exception typ kann dann aber beliebig sein. deswegen möchte ich durch Error->ClassNameIs wissen, ob es sich um den typ ESocketError handelt udn nicht einen anderen...

    oder irre ich mich hier? 😕



  • Hallo

    jein würde ich sagen. mit if(Error) frage ich ja nur ab ob der zeiger nicht NULL ist, der exception typ kann dann aber beliebig sein. deswegen möchte ich durch Error->ClassNameIs wissen, ob es sich um den typ ESocketError handelt udn nicht einen anderen...

    Du kannst den Cast gleich auf ESocketError machen :

    ESocketError *Error = dynamic_cast<ESocketError*>(EurekaExceptionRecord.ExceptionObject);
    if(Error)
    {
      }
    

    Das dynamic_cast sorgt im Gegensatz zu static_cast für eine Typüberprüfung, sodas bei anderen Exceptions als ESocketError das Ergebnis NULL ist.

    /Edit : Ich werde mir mal EurekaLog anschauen.

    bis bald
    akari



  • hey cool danke! das macht sinn 🕶


Anmelden zum Antworten