Bonsoir,
J'aurais une 'petite' question...
J’écris un code pour ajouter une méthode dynamique a un évènement.
- La méthode dynamique appelle une autre méthode ("Raise") avec cette signature "public void Raise(params object[] param);"
Voici la partie du code qui s'occupe de ça...
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 // get event info eventInfo= o.GetType().GetEvent(EventName); MethodInfo mid = eventInfo.EventHandlerType.GetMethod("Invoke"); ParameterInfo[] paraminfo = mid.GetParameters(); List<Type> paramtype = new List<Type>(); paramtype.Add(GetType()); foreach (ParameterInfo t in paraminfo) { paramtype.Add(t.ParameterType); } // get Raise local methode info MethodInfo raise = GetType().GetMethod("Raise"); // DynamicMethod DynamicMethod dm = new DynamicMethod("LocalRaiseEvent", mid.ReturnType, paramtype.ToArray(), GetType().Module/*_oevent.Module/*,raise.Module*/); ILGenerator ilg = dm.GetILGenerator(); for (int bc = 0; bc < paramtype.Count; bc++) { ilg.Emit(OpCodes.Ldarg, bc); } ilg.Emit(OpCodes.Call, raise); ilg.Emit(OpCodes.Ret); // Add _oevent.AddEventHandler(o, dm.CreateDelegate(eventInfo.EventHandlerType, this));
Si l’évènement d'origine vient d'une classe que j'ai crée cela passe très bien, par contre si je prends un Control (une form par exemple) une exception estlevée "InvalidProgramException- Le compilateur JIT a rencontré une limitation interne"
Il y aurait il des idées du pourquoi j'ai cette erreur et surtout comment l'eviter?
Merci
Partager