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

Framework .NET Discussion :

[2.0] Traduire du code décompilé par Reflector (Event, Attribute ..)


Sujet :

Framework .NET

  1. #1
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut [2.0] Traduire du code décompilé par Reflector (Event, Attribute ..)
    Hello !

    J'ai testé la décompilation de la classe System.Windows.Forms.BindingSource à l'aide l'outils Reflector, avec présentation dans un équivalent VB.NET & C#.

    Le code décompilé que Reflector affiche est en fait une nouvelle représentation VB.NET (ou C#) du IL contenu dans l'assembly d'origine.


    Or je rencontre des problèmes de transcription pour la déclaration des événements et des attributs.

    Pour la version VB.NET, je ne sais pas encore comment traduire :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Public Event AddingNew As AddingNewEventHandler
                AddHandler(ByVal value As AddingNewEventHandler)
                    MyBase.Events.AddHandler(BindingSource.EVENT_ADDINGNEW, value)
                End AddHandler
                RemoveEvent(ByVal value As AddingNewEventHandler)
                    MyBase.Events.RemoveHandler(BindingSource.EVENT_ADDINGNEW, value)
                End RemoveEvent
            End Event
    Et je ne sais pas à quoi correspond SRDescription dans :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComplexBindingProperties("DataSource", "DataMember"), SRDescription("DescriptionBindingSource"), DefaultProperty("DataSource"), DefaultEvent("CurrentChanged"), DefaultMember("Item"), Designer("System.Windows.Forms.Design.BindingSourceDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>

    Un coup de main serait le bien venu car je ne maîtrise pas bien la déclaration des événements en VB.NET (encore moins en C#), et quant aux attributs, j'ai quasiment tout à apprendre.
    Fichiers attachés Fichiers attachés
    (\ _ /)
    (='.'=)
    (")-(")

  2. #2
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut.

    la décompilation des classes du framework est strictement interdite ...

    Pour ton informations le SRDescription est un attribut interne de l'espace de nom System.Windows.Forms
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  3. #3
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Citation Envoyé par dev01
    la décompilation des classes du framework est strictement interdite ...
    Je veux bien te croire sur parole, mais je regrette alors que Ms ne soit pas plus explicite et n'hésite pas à promouvoir Reflector et ses Add-Ins. http://www.gotdotnet.com/workspaces/...3-e0f4fc233ade
    http://www.microsoft.com/france/msdn...rotection.mspx
    Etc.


    Concrêtement, j'ai besoin de réécrire une ou deux propriétés ou méthodes d'un composant pour me faciliter grandement la vie.

    Mais je vais voir si je peux m'en sortir en héritant de la classe initiale et en utilisant Shadows pour personnaliser certains membres.

    Sinon pour l'événement, je pense la bonne syntaxe devrait tourner autour de :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        Public Custom Event AddingNew As AddingNewEventHandler
            AddHandler(ByVal value As AddingNewEventHandler)
                MyBase.Events.AddHandler(BindingSource.EVENT_ADDINGNEW, value)
            End AddHandler
            RemoveHandler(ByVal value As AddingNewEventHandler)
                MyBase.Events.RemoveHandler(BindingSource.EVENT_ADDINGNEW, value)
            End RemoveHandler
            RaiseEvent(ByVal sender As Object, ByVal e As AddingNewEventArgs)
               '??? 
    'Dim handler1 As AddingNewEventHandler = DirectCast(MyBase.Events.Item(BindingSource.EVENT_ADDINGNEW), AddingNewEventHandler)
                'If (Not handler1 Is Nothing) Then
                '    handler1.Invoke(sender, e)
                'End If
            End RaiseEvent
        End Event
    (\ _ /)
    (='.'=)
    (")-(")

  4. #4
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Ils font la pub de l'outil car il est génial et montre les capacités de .NET.
    Tu peux parfaitement l'utiliser sur tes propres assembly, mais pas sur celle du framework ou alors je comprend plus rien ...

    Enfin bon pour les évènements ... vu le code donné c'est pas un évènement mais une propriété qui ajoute un évènement ... Désolé de ne pas pouvoir t'aider plus mais le VB.NET et moi ...
    - MVP C#
    -Tout problème a une solution, le vrai problème est de trouver la solution .....
    - Linux & mono : l'avenir

  5. #5
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Citation Envoyé par dev01
    Enfin bon pour les évènements ... vu le code donné c'est pas un évènement mais une propriété qui ajoute un évènement ... Désolé de ne pas pouvoir t'aider plus mais le VB.NET et moi ...
    Non, non c'est bien un événement !
    En fait la classe mère Component expose une propriété Events qui est un EventHandlerList.
    D'après moi les événements ont été déclarés sous forme de Custom Event (permet une meilleure gestion de la mémoire).
    Or effectivement, cette déclaration impose des sections AddHandler et RemoveHandler pour prendre définir l'ajout / suppression du gestionnaire de l'événement à MyBase.Events.
    Pour finir un Custom Event impose de déclarer aussi une section RaiseEvent.
    Comme le corps de procédure RaiseEvent est facultatif et que par ailleurs la classe que j'analyse possède des procédures de levée de chaque événement, je ne sais pas si je dois laisser ce corps vide ou bien y adapter le contenu des procédures d'appel ...
    Voici un exemple de procédure d'appel :
    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Protected Overridable Sub OnBindingComplete(ByVal e As BindingCompleteEventArgs)
            Dim handler1 As BindingCompleteEventHandler = DirectCast(MyBase.Events.Item(BindingSource.EVENT_BINDINGCOMPLETE), BindingCompleteEventHandler)
            If (Not handler1 Is Nothing) Then
                handler1.Invoke(Me, e)
            End If
    Moi je propose de tranférer le contenu de ces procédures dans la déclaration de l'événement, comme ceci :

    Code VB.NET : 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
    17
    18
        Public Custom Event AddingNew As AddingNewEventHandler
            AddHandler(ByVal value As AddingNewEventHandler)
                MyBase.Events.AddHandler(BindingSource.EVENT_ADDINGNEW, value)
            End AddHandler
            RemoveHandler(ByVal value As AddingNewEventHandler)
                MyBase.Events.RemoveHandler(BindingSource.EVENT_ADDINGNEW, value)
            End RemoveHandler
            RaiseEvent(ByVal sender As Object, ByVal e As AddingNewEventArgs)
                Dim handler1 As AddingNewEventHandler = DirectCast(MyBase.Events.Item(BindingSource.EVENT_ADDINGNEW), AddingNewEventHandler)
                If (Not handler1 Is Nothing) Then
                    handler1.Invoke(sender, e)
                End If
            End RaiseEvent
     
     
        Protected Overridable Sub OnAddingNew(ByVal e As AddingNewEventArgs)
            RaiseEvent AddingNew(Me, e)
        End Sub



    Citation Envoyé par dev01
    Ils font la pub de l'outil car il est génial et montre les capacités de .NET.
    Tu peux parfaitement l'utiliser sur tes propres assembly, mais pas sur celle du framework ou alors je comprend plus rien ...
    Ok, mais je trouve quand même bizarre de lire sur MSDN (cf. mon deuxième lien) :
    Examiner IL avec un œil en C#
    Pour explorer le cœur de l'ASP.NET 1.1, il me fallait un outil un peu plus élaboré que le désassembleur ILDASM.EXE, inclus dans le kit de développement .NET Framework . Si j'avais été plus intelligent, j'aurai peut-être réussi à isoler le System.Web avec ILDASM uniquement, mais lire du IL n'est pas très aisé et j'avais un planning à tenir. J'ai découvert l'outil voulu sur le réflecteur de Luz Roeder. Le réflecteur (Reflector) est un navigateur d'objet qui vous offre une très bonne vue en arborescence de tous les espaces de noms et classes que fournit la bibliothèque de classes de base (BCL).

    Mais là où Reflector se distingue le plus, c'est dans sa capacité à décompiler les assemblys .NET et à présenter les résultats, non pas en IL mais en équivalent C# ou Microsoft® Visual Basic® .NET. Bien sûr, la fidélité du procédé n'est pas absolue (on perd par exemple les noms de variables locales), mais ainsi va la vie (et la programmation).

    Donc, j'ai donc examiné le System.Web de fond en comble jusqu'à ce que je trouve une classe appelée CrossSiteScriptingValidation. Nom prometteur...

    Etc.

    Maintenant, nous avons besoin d'une classe personnalisée Exception qui est dérivée de ApplicationException et qui sera appelée avec pertinence HttpRequestValidationException. C'est incidemment le même nom que celui qu'utilise ASPNET 1.1, mais dans un espace de noms différent.
    Perso, je ne voulais pas faire autre chose.
    (\ _ /)
    (='.'=)
    (")-(")

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

Discussions similaires

  1. [VB6]Code Manchester par port com
    Par alamaison62 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/02/2006, 09h21
  2. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  3. Réponses: 6
    Dernier message: 26/09/2005, 18h35
  4. []Traduire un code barre alphanumérique en nombre
    Par iskandhar dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 21/08/2005, 21h17
  5. Réponses: 2
    Dernier message: 18/10/2003, 14h42

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