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 confirm�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    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 averti

    Inscrit en
    D�cembre 2004
    Messages
    5
    D�tails du profil
    Informations forums :
    Inscription : D�cembre 2004
    Messages : 5
    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 confirm�
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    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 exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    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

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

    Informations forums :
    Inscription : Septembre 2003
    Messages : 70
    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: 22/08/2013, 23h29
  2. R�ponses: 1
    Dernier message: 26/12/2010, 21h20
  3. Exception non g�r�e dans mon application
    Par lisco dans le forum MFC
    R�ponses: 1
    Dernier message: 23/11/2010, 10h09
  4. R�ponses: 2
    Dernier message: 25/07/2010, 15h32

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