Bon finalement ce n'est pas totalement fini. J'essaye depuis hier de faire fonctionner les méthodes créées, ça ne marche manifestement pas.
Pour donner quelques informations :
- La compilation du code marche bien : si y'a des erreurs, elles sont renvoyées, sinon, la Dll est crée ; j'ai vérifié le code à compiler, il est bel est bien OK.
- L'assembly est trouvée, le Type utilisé est trouvé dans l'assembly, les méthodes sont trouvées, et les MethodInfo sont correctement récupérés via type.GetMethod().
Et voilà que ça cloche, j'ai essayé deux manières différentes d'appeler la méthode : aucune exception n'est levée, mais le corps de la méthode ne s'exécute pas.
Voilà la manière dont j'ai procédé :
Je récupère bien l'objet que je veux ici.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MethodInfo method = type.GetMethod("Behavior_" + InitData.BehaviorID.ToString() + "_Always", BindingFlags.Public | BindingFlags.Static);
Avec la déclaration suivante de DelegateSimple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part MethodAlways = (DelegateSimple)Delegate.CreateDelegate(typeof(DelegateSimple), method);
Le delegate est bien créé, jusque là, tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part delegate void DelegateSimple(Event self);
Cependant, ça cloche lorsque je l'appelle :
- Soit avec Method.Invoke(null, [Ici un tableau contenant this en argument])
- Soit avec MethodAlways(this)
Dans les deux cas, rien ne se passe (de plus aucune exception n'est levée). Et malheureusement je ne vois pas du tout pourquoi cela ne marche pas. J'ai vérifié le code compilé, qui ressemble d'ailleurs à ceci :
Donc je ne sais pas à quel niveau ça coince, et ça m'embête un peu ^^".
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 using System; using Geex.Play.Rpg; using Geex.Edit; using Geex.Play.Rpg.Scripts; using Geex.Run; using UsineEnFolie.Platform; namespace UsineEnFolie.Platform { public class Behaviors_Maps__Test_1_Test_2_Map_01_map { // Nom = TOUJOURS public static void Behavior_0_Always(Event self) { self.RealX += 1; GlobalRefs.console.WriteLine("Test ! Test !"); throw new Exception("Le code est lu !"); } // Encore des méthodes... } }
Merci par avance de votre aide
Partager