Bonjour à tous !
J'ai un problème que je n'arrive pas à résoudre, mais il n'est pas facile à expliquer.
J'ai actuellement une appli dans laquelle une méthode MA1 d'un objet A génère dynamiquement une méthode MB affectée à un objet B. Cette méthode va appeler une autre méthode MA2 de A mais qui est statique (à l'aide de la réflexion et des OpCodes). Cette méthode MA2 cible de A ne peut donc faire référence à A à l'aide de this.
J'aimerais que l'objet A qui génère cette méthode MB dynamiquement puisse lui passer en argument une référence à lui-même (this). Mais quel(s) OpCode(s) et quelle syntaxe utiliser ?
Ma méthode dynamique MB accepte déjà trois arguments (Control, Object et Int32) que je récupère facilement :
xILGen est le ILGenerator, eventStructureIndex mon argument Int32 et MA2 la méthode cible statique de A (à laquelle je voudrais passer dynamiquement une référence à A.Code:
1
2
3
4
5 xILGen.Emit(OpCodes.Ldarg_0); xILGen.Emit(OpCodes.Ldarg_1); xILGen.Emit(OpCodes.Ldc_I4, eventStructureIndex); xILGen.Emit(OpCodes.Call, MA2); xILGen.Emit(OpCodes.Ret);
J'aimerais passer "en dur" une référence à l'objet A dans lequel ce morceau de code est situé (en passant par this ?)
J'avais pensé à une commande de type
Mais la syntaxe ne passe pas.Code:xILgen.Emit(OpCodes.Ldarg, this) ?
D'avance merci si vous avez la solution (en espérant avoir été clair :roll:).