Mécanisme de réflexion

Résolu
fabrizionnf Messages postés 13 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 13 novembre 2008 - 13 juin 2006 à 16:14
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 - 14 juin 2006 à 14:00
Voila mon code pour utiliser Invokemember qui ne fonctionne pas elle me marque une erreur d'exception au niveau de l'initialisation de la variable Instance de type object.

MethodInfo method = Methods[this.listBox1.SelectedIndex];
   object[] myArguments = {100,200};
   object result = null;



   Type essai = res.GetClass();



   object Instance = Activator.CreateInstance(essai);
   try
   {
    result = essai.InvokeMember(Methods[this.listBox1.SelectedIndex].ToString(),BindingFlags.InvokeMethod,null,Instance,myArguments);
    MessageBox.Show(result.ToString());
   }
   catch(Exception Ex )
   {
    MessageBox.Show("Erreur de Méthodes"+ Ex);
   }
  }
Aidez moi s'il vous plaît c'est urgent .
Le lion ne proclame pas sa tigritude

4 réponses

dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
13 juin 2006 à 16:50
Salut,

Pourrais-tu nous préciser quelle est l'exception soulevée, et le contenu du message d'erreur ?
fabrizionnf Messages postés 13 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 13 novembre 2008
13 juin 2006 à 18:50
parameterless dont have interface object 
Le lion ne proclame pas sa tigritude
fabrizionnf Messages postés 13 Date d'inscription vendredi 2 juin 2006 Statut Membre Dernière intervention 13 novembre 2008
14 juin 2006 à 13:22
Salut

Pourrais tu m'expliquer les paramétres dde la méthode InvokeMember en
particulier le 2épararamétre BindingsFlags , qui je crois me cause
énormement de soucis .En fait

et le paramétre Binder .

merci
Le lion ne proclame pas sa tigritude
dgouttegattat Messages postés 129 Date d'inscription mardi 22 novembre 2005 Statut Membre Dernière intervention 30 décembre 2007 3
14 juin 2006 à 14:00
Pour ce que j'en sais, le paramètre BindingFlags permet de préciser deux choses :
-- ce que tu veux faire : créer une instance du type (BindingFlags.CreateInstance), appeler une méthode définie dans le type (BindingFlags.InvokeMethod), récupérer la valeur d'une propriété (BindingFlags.GetProperty), etc... ;
-- le genre de méthodes que tu veux appeler : publiques ou non (BindingFlags.Public, BindingFlags.NonPublic), statiques ou d'instance (BindingFlags.Static, BindingFlags.Instance).

Dans ton cas, tu veux appeler une méthode, donc l'utilisation de BindingFlags.InvokeMethod est correcte, mais tu devrais peut-être essayer :


<hr />
InvokeMember(..., BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, ...);


<hr />
afin que InvokeMember recherche bien une méthode d'instance, et ce qu'elle soit publique ou privée.

Concernant le Binder, a priori c'est l'objet qui est chargé de rechercher la méthode à appeler. Je pense que tu peux laisser ce paramètre à null, afin d'utiliser le Binder par défaut.

Tiens-moi au courant.
Rejoignez-nous