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 :

Reflection : Cast type structure


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Par défaut Reflection : Cast type structure
    Bonjour,

    J'utilise la Reflection, pour charger une dll et appeler une méthode. Tout fonctionne bien sauf que je ne sais pas comment traiter le retour de cette méthode.

    Elle retourne un tableau de structure, et cette dernière est défini dans la DLL.

    Donc j'en suis là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayList list = new ArrayList();       
    list = (ArrayList)methode.Invoke(obj, param);
    Mais je n'arrive pas à typer ma variable list.

    En gros je voudrais faire :

    MaStructuredemadll strdll;
    strdll = (MaStructuredemadll)list[i];

    Pouvez vous m'aider ?

    Merci.

  2. #2
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Si ta structure n'est définie que dans la dll, tu es bon pour continuer en Reflection...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Par défaut
    J'ai bien essayé de la redefinir dans mon prog principal, mais j'ai une erreur à l'execution comme quoi il ne peut convertir un type MaStructure en type MaStructure ...

    Que veut tu dire par continuer en Reflexion ? Y'a t'il une méthode pour que je puisse récupérer ma structure de retour ?

  4. #4
    Membre Expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    object o = methode.Invoke(obj, param); 
    Type t = o.GetType(); // récupère le type réel
    foreach(PropertyInfo p in t.GetPropeties())
    {
      // traitement
    }
    Si c'est effectivement une ArrayList, il faut appeler les méthodes d'itération dessus ( GetEnumerator ) avant de faire des traitements sur l'enumerator.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2008
    Messages : 91
    Par défaut
    tiens j'ai fais une petite méthode pour transformer un objet contenant une collections en autant d'objets qu'il y a d'items dans la collections : (après tu peux l'adapter pour la liste que tu veux obtenir).

    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
     
    public static List<object> GetCollections(object target)
            {
                List<object> objets = new List<object>();
                object enumerateur = target.GetType().InvokeMember("GetEnumerator", BindingFlags.InvokeMethod, null, target, null);
                object FirstMoveNext = enumerateur.GetType().InvokeMember("MoveNext", BindingFlags.InvokeMethod, null, enumerateur, null);
                if ((bool)FirstMoveNext == true)
                {
                    object item = enumerateur.GetType().InvokeMember("Current", BindingFlags.GetProperty, null, enumerateur, null);
                    objets.Add(item);
                    while ((bool)enumerateur.GetType().InvokeMember("MoveNext", BindingFlags.InvokeMethod, null, enumerateur, null))
                    {
                        item =  enumerateur.GetType().InvokeMember("Current", BindingFlags.GetProperty, null, enumerateur, null);
                        objets.Add(item);                    
                    }
     
                }
                return objets;
            }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 18
    Par défaut
    Super, je m'en suis sorti !!!!

    Merci beaucoup !

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

Discussions similaires

  1. cast type monétaire
    Par zesamoth dans le forum Access
    Réponses: 4
    Dernier message: 14/08/2006, 20h17
  2. Variable de type structure
    Par Houssem dans le forum WinDev
    Réponses: 4
    Dernier message: 08/08/2006, 10h49
  3. Cast de structures
    Par glKabuto dans le forum C
    Réponses: 29
    Dernier message: 02/06/2006, 11h05
  4. Réponses: 6
    Dernier message: 29/04/2006, 20h37
  5. Renvoyer un type structuré dans objet OLE
    Par Bleuarff dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 13/05/2005, 20h05

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