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# Discussion :

[C#]Comment récupérer le code d'une Exception ?


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut [C#]Comment récupérer le code d'une Exception ?
    Bonjour,

    je voudrais connaitre le moyen de récupérer le code Hexa d'une exception de la même façon que le code VB .NET ci-dessous mais en C#, si c'est possible.

    Merci pour votre aide!

    ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     'Error handling 
     On Error GoTo Error_Handler
     
    Error_Handler:
    'Implement error handling at the end of your subroutine. This implementation is for demonstration purposes 
            MsgBox("Error number: " & Hex(Err.Number) & ", " & Err.Description)

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    salut joujoukinder
    j'ai du mal à croire que ceci soit du VB.Net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo Error_Handler ...
    Sinon est-ce que c'est la Propriété Protégée Exception.HResult que tu veux récupérer
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Et pourtant.... elle tourne...

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Sur vb6 certes, sur vb.net pourquoi pas

    Sinon est-ce que c'est la Propriété Protégée Exception.HResult que tu veux récupérer
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    En effet le nom me semble pertinant, je pense que cela doit être ça...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    En fait je ne crois pas que cela soit ça parce que sur le code du lien que tu m'as donné il y a un code Hexa qui est en dur et il me semble que a aucun moment il n'y ait récupération du code réel de l'Exception:

    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
    16
     
     
    // Create the derived exception class.
        class SecondLevelException : Exception
        {
            const int SecondLevelHResult = unchecked( (int)0x81234567 );
     
            // Set HResult for this exception, and include it in 
            // the exception message.
            public SecondLevelException( string message, Exception inner ) :
                base( string.Format( "(HRESULT:0x{1:X8}) {0}", 
                    message, SecondLevelHResult ), inner )
            {
                HResult = SecondLevelHResult;
            }
        }


    En fait ce que je veux moi c'est récupérer le code d'une exception de l'application et non pas générer le code de ma propre exception.

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Oui en effet c'est plus compliqué que je ne pensais
    Cela nécessite que tu gères dans tes catch les differents types d'exception qui peuvent être levés par ta méthode et ainsi pouvoir verifier si celle-ci expose une propriété ErrorCode

    A moins que tu veuilles faire quelquechose de plus générique, qui par l'intermediaire de Reflection puisse effectuer la verification la presence d'un membre nommé ErrorCode dans l'exception en cours
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Mais si il y a une méthode assez simple en VB .NET il doit aussi y avoir l'équivalence en C# non?

    Je voudrais reprendre le même principe que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    Error_Handler:
    'Implement error handling at the end of your subroutine. This implementation is for demonstration purposes
        MsgBox "Error number: " & Hex(Err.Number) & ", " & Err.Description

  9. #9
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Très sincèrement je doute qu'une specifité de la librairie Microsoft.VisualBasic ait de principe un equivalent C#. Attendons d'autres eclaircissement de specialistes C#

    J'ai tenté la traduction direct sous SharpDevelop
    // TODO: NotImplemented statement: ICSharpCode.SharpRefactory.Parser.AST.VB.OnErrorStatement
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    OK je crois qu'il vaut mieux attendre, je vais continuer les recherches de mon côté, merci!

  11. #11
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    J'ai fait 2-3 tests mais je ne vois pas à quoi correspond la propriété Number: en C#, y'a pas ca

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    C'est le code de l'erreur, qui correspond à l'erreur Windows et il est possible de retracer l'origine de l'exception.

  13. #13
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut
    Il s'agit bien de la propriété HResult, qui est rendue publique par la propriété ErrorCode pour certains types d'Exceptions.
    Toutefois il semble clair qu'il y a une volonté d'abandonner la gestion des erreurs par codes au profit des exceptions.
    L'équipe VB a rendu la transition plus souple en permettant d'utiliser encore ce code (mais la documentation VB ne comprend plus la liste des codes), l'équipe C# a été plus "brutale".

    et il est possible de retracer l'origine de l'exception
    La propriété Source de la classe Exception fournit cette information.

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Bon eh bien après toutes mes recherches, je n'ai pas trouvé le moindre moyen de récupérer ce code...

    Il y a bien le moyen de récupérer la dernière Win32 error, mais c'est la dernière, et pas forcément la bonne, enfin je ne crois pas....

    Alors là je dois dire que je suis dépité...

    C'est étrange que cela soit aussi facile de faire un Handler d'erreurs Win32 en VB et pas en C#.

    Microsoft, si tu nous écoutes... ;-)

  15. #15
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    sinon tu peux toujours developper à part une petite dll en VB.Net pour les fonctionnalités qui requièrent cette implementation. Et ensuite tu n'auras plus qu'à l'intégrer en reference dans ton projet C#
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    C'est vrai que c'est une possibilité, mais je ne suis pas sûr que cela fonctionne ainsi, parce que si tu regardes le code, je ne sais pas si il est possible de récupérer les erreurs d'autres méthodes ou externes à la classe.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Si l'exception vient de code COM, elle sera de type COMException, qui a une propriété ErrorCode contenant le HRESULT (dixit MSDN). Donc try/catch, comme tout le monde.
    Si c'est du Win32, Win32Exception. Même chose, ErrorCode.
    (oh tiens, y a même un NativeErrorCode avec ça, pour récupérer le code d'erreur Win32)
    (pi ça fait 3 fois que j'édite ce post, je vais arrêter, tout est dans MSDN de toute façon :)

    De manière générale, il y a plein d'exceptions dérivant d'ExternalException, et ErrorCode vient de là. Ça a l'air *presque* prévu pour :)

    Ah, et l'idée d'avoir dans C# un équivalent de la pourriture qu'est On Error machintruc, poubelle hein.
    Ça fait partie des saletés qu'ils n'auraient jamais dû conserver pour VB.NET (avec tout le reste des spécificités VB6 quoi...)
    (allez, un dernier edit : spécificités VB6 qui devraient mourir dans d'atroces souffrances, sans exception)
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2005
    Messages : 144
    Points : 94
    Points
    94
    Par défaut
    Bon ben merci alors parce que je pense que je peux y aller un petit bout avec ça. Bien que je pensais que derrière chaque erreur il y avait une erreur Win32.

    Je vais voir ce que je trouve sur MSDN. De toute façon je ne trouve jamais ce que je veux sur leur doc...

    a+

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    joujoukinder: a tu trouvé une solution a ce probleme ?
    COrdialement
    Fas3r

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

Discussions similaires

  1. [PowerShell] Comment récupérer le code d'erreur à la fin d'exécution d'une commande ?
    Par spynux dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 26/11/2010, 09h18
  2. [VB 2005] Comment récupérer un code dans une release
    Par Herlece dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/10/2007, 19h02
  3. Comment récupérer le chemin d'une table liée
    Par ptitepunk dans le forum Access
    Réponses: 2
    Dernier message: 15/09/2005, 10h47
  4. [Sécurité] comment récupérer le subject dans une page jsp?
    Par lalakers dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 13/07/2005, 11h42
  5. Réponses: 5
    Dernier message: 21/12/2004, 18h12

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