IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

intercepter une exception non gérée dans une application mdi


Sujet :

C++Builder

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Points : 40
    Points
    40
    Par défaut intercepter une exception non gérée dans une application mdi
    en appuyant sur un boutton
    la fonction associée peut lever une exception
    non gérée par la fonction appelante

    Cependant j'aimerais pouvoir la gerer au niveau global
    pourque au moins je puisse faire apparaitre une message
    avec le type, l'erreur associée plutot que la fenetre :

    c++ exception OK

    j'ai essayé dans le bloc mdiapp : Application->Run
    rien...
    apres je ne sais pas ou la mettre

    (jai desactive la gestion des exceptions sous le debuggeur)

  2. #2
    Membre du Club

    Inscrit en
    Décembre 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 5
    Points : 53
    Points
    53
    Par défaut
    :
    Tu as désactivé les exceptions avant ou après avoir fait tes tests?.
    J'ai fait ça une fois : en mettant un try ...catch au niveau du run tu n'interceptes pas tout, il est souvent nécessaire de le placer près du code qui peut générer l'exception et à ta charge ensuite de la gérer à ta guise.

    JM64

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    et bien disons que lorsqu'une exception est levée dans le programme
    elle est automatiquement terminale pour le thread en cours...

    donc aucune envie de la gerer car il n'y a rien de special a faire
    par contre en emettant une exception sous la forme d'un char *
    je peux quand meme faire apparaitre un message d'erreur
    plus clair que c++ exception (apres desactivation) ou un message d'erreur de type char * a été généré (avant desactivation)

    j'aurais aimé par (faignantise) faire juste un catch qui serait chargé d'intercepter toutes les exceptions non gérées et d'afficher un message d'info, j'ai guere envie d'ecrire pour chaque fonction

    catch(char * msg)
    {
    MessageBox(0,0,msg);
    }

    j'aurais prefere ecrire cela qu'une fois dans l'application
    plutot qu'une cinquantaine

  4. #4
    Membre averti
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Points : 403
    Points
    403
    Par défaut
    Bonjour,

    il faut que tu rediriges l'événement OnException de ton application. Dans ce cas toutes les exceptions (ou presque) seront interceptées par ta méthode:
    Utilisez OnException pour modifier le comportement par défaut ayant lieu quand une exception n'est pas gérée par le code de l'application. Le gestionnaire d'événement OnException est appelé automatiquement par la méthode HandleException.

    OnException ne gère que les exceptions se produisant durant le traitement des messages. Les exceptions ayant lieu avant ou après l'exécution de la méthode Run de l'application ne génèrent pas d'événements OnException.

    Si une exception se produit dans les blocs try du code de l'application, l'application appelle automatiquement la méthode HandleException. HandleException appelle le gestionnaire OnException, s'il est défini (sauf si l'objet exception est EAbort). S'il n'y a pas de gestionnaire, elle appelle ShowException pour afficher une boîte de message indiquant qu'une erreur a eu lieu.

    TExceptionEvent est le type des événements OnException. Il désigne une méthode gérant les exceptions dans l'application. Le paramètre Sender désigne l'objet ayant déclenché l'exception, et E indique l'objet de l'exception.
    Et un exemple de code:

    .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void __fastcall AppException(TObject *Sender, Sysutils::Exception *E);
    .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
      Application->OnException = AppException;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::AppException(TObject *Sender, Sysutils::Exception *E)
    {
      AnsiString Message;
      Message = E->ClassName();
      Message+= " - ";
      Message+= E->Message;
      ShowMessage(Message);
    }
    Bon courage
    "Don't think you are, know you are..." (Morpheus)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    Points : 40
    Points
    40
    Par défaut
    ok

    donc j'ai vu que cela se faisait facilemetn en collant
    un composant ApplicationEvent

    En fait en continuant a chercher j'ai vu qu'il suffisait de creer une exception de type VCL :

    throw Exception("Hello");

    et par defaut cela affiche une boite de dialogue avec le message Hello
    ce que je voulais au depart, je n'ai donc pas besoin de reprogrammer cela me va tres bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/08/2013, 00h29
  2. Réponses: 1
    Dernier message: 26/12/2010, 22h20
  3. Exception non gérée dans mon application
    Par lisco dans le forum MFC
    Réponses: 1
    Dernier message: 23/11/2010, 11h09
  4. Réponses: 2
    Dernier message: 25/07/2010, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo