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# & C++/CLI] Recuperation d'Attributes C++/CLI dans une Assembly en C#


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Points : 44
    Points
    44
    Par défaut [C# & C++/CLI] Recuperation d'Attributes C++/CLI dans une Assembly en C#
    Bonjour

    Bon je savais pas trop ou poster ça vu que mon code utilise deux langages ...

    Donc voila j'ai un petit soucis j'espère que vous serrez en mesure de m'éclairer un peu

    Donc j'ai des .h en C++/CLI qui contiennent des interfaces qui sont en suite utilisée plus loin par des .cpp ... Tout ces points h sont assemblés a la compilation dans une dll.

    Mon but est de générer certainnes parties du code des classes interfacées ua l'aide de code en C# dans T4 Editor. J'ai donc essayé de creer un attribute en C++/CLI que je placerais sur les classes que je veux générer uniquement.

    La classe Attribute :
    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
    17
    18
    19
    20
    21
    22
    23
    24
     
        public ref class InterfaceGeneratedAttribute: public Attribute
        {
        protected:
            String^ name;
     
        public:
            InterfaceGeneratedAttribute(String^ str)
            {
                name = str;
            }
     
            property String^ title
            {
                void set(String^ value)
                {
                    name = value;
                }
                String^ get()
                {
                    return name;
                }
            }
        };
    Je place en suite mes attributs sur les classes qui doivent êtres générées de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    [InterfaceGenerated("Light")]
    public interface class ILight : IDestroyable
    {
    ...
    }
    Je génère ma dll pas de warnings.

    Mais quand je veux charger la dll dans le C# impossible de récupérer des attributs avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Assembly asm = Assembly.ReflectionOnlyLoadFrom(@"C:\....dll");
    IList<CustomAttributeData> attributes = CustomAttributeData.GetCustomAttributes(asm);
    Malheureusement "attribute" reste vide.

    Avez vous une idée ?

    La doc dispo sur internet etant très light mise a part la msdn et elle ne couvre presque jamais le chargement depuis une dll.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    c'est parce que le code que tu as écrit récupère les attributs appliqués à l'assembly, pas au type ILight
    Il faut faire quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IList<CustomAttributeData> attributes = CustomAttributeData.GetCustomAttributes(typeof(ILight));

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Points : 44
    Points
    44
    Par défaut
    Merci de m'avoir mis sur la piste bon c'etait pas exactement ca mais l'idée y etait

    finalement je fais ca et ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Assembly asm = Assembly.LoadFrom(@"C:\...dll");
    foreach (Type type in asm.GetTypes())
    {
      IList<CustomAttributeData> resultat = CustomAttributeData.GetCustomAttributes(type);
      foreach (CustomAttributeData atr in resultat)
      {
        if (atr.ToString().Contains("InterfaceGenerated"))
        {
        ...
        }
      }
    }
    Merci pour le coup de main

Discussions similaires

  1. Recuperer un attribut de session dans la requete
    Par Alec6 dans le forum Struts 1
    Réponses: 4
    Dernier message: 05/05/2009, 08h56
  2. recuperer un attribut apres affichage d'une fenetre
    Par DragonLebna dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 16/05/2007, 19h22
  3. Réponses: 2
    Dernier message: 14/12/2006, 18h08
  4. Réponses: 5
    Dernier message: 08/08/2006, 00h02
  5. recuperer feuille excel en vb dans une list
    Par digger dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/11/2005, 19h33

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