Dico ;)
Version imprimable
Dico ;)
Aaaaa... relit mon dernier post... jai editer pendant que ta poster :)
EDIT: Minute... je crois savoir pkoi...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 private void W_Compiler2() { string W_MyCode = "if(true){txtRecruits1.Text = \"Fonctionne\";}"; CodeDomProvider cc = new CSharpCodeProvider(); CompilerParameters cp = new CompilerParameters(); cp.ReferencedAssemblies.Add("System.dll"); cp.ReferencedAssemblies.Add("System.Data.dll"); cp.ReferencedAssemblies.Add("System.Windows.Forms.dll"); cp.ReferencedAssemblies.Add(typeof(Form1).Assembly.Location); string toCompile = "using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Text;using System.Windows.Forms;using System.Collections;" + "namespace Arcomage{"+ "public class ClassTmp:Form1{"+ "public ClassTmp(){}"+ "public void FunctionTmp(){" + W_MyCode + "}}}"; CompilerResults cr = cc.CompileAssemblyFromSource(cp, toCompile); if (cr.Errors.HasErrors) { String text = "Il y a eu des erreurs dans la compilation d'un script :\n"; foreach (CompilerError err in cr.Errors) text += err + "\n"; Console.WriteLine(text); return; } Assembly a = cr.CompiledAssembly; Type classTmp = a.GetType("Arcomage.ClassTmp"); object tmp = Activator.CreateInstance(classTmp); MethodInfo methodinf = classTmp.GetMethod("FunctionTmp"); methodinf.Invoke(tmp, new object[0]); }
Ca me donne pas de message d'erreur, mais rien n'affiche dans mon textbox.
Je suis si pret/pres/prait du but... je suis tout febrile :)
Je spam F5 en esperant avoir une reponse de tomlev :)
Ben c'est logique en fait... L'objet tmp n'est pas la form affichée dans ton programme, c'est une nouvelle instance de ClassTmp, elle-même héritée de Form1. Ce sont deux objets différents, donc ton code accède en fait à une autre TextBox...
Il faudrait que tu passes Form1 en paramètre de FunctionTmp
Ok... Je supose que je vais changer une ligne pour
mais ensuite, comme je lui envoit mon Form1?Code:"public void FunctionTmp(Form1 MyForm){" + W_MyCode + "}}}";
Et vais-je devoir changer une ligne pour
?Code:string W_MyCode = "if(true){MyForm.txtRecruits1.Text = \"Fonctionne\";}";
Et question hors contexte... comment je fais pour editer ma Signature? Je ne trouve pas l'option dans mon profile
En paramètre de methodinf.Invoke
Tout à fait
Tu ne peux pas, parce que tu n'es pas encore membre du club ;)
Tu auras accès à cette option quand tu auras posté plus de 50 messages
http://www.developpez.net/forums/d15...-membres-club/
Evidement ca marche pas... mais la jai ma journee dans le corps et le cerveau fonctionne vraiment pas...Code:methodinf.Invoke(tmp, this);
50 posts... ca invite pas au trolling? :)
EDIT: Bon, je vais me coucher... j'arrive plus a tenir debout... assis.. whatever
Je fais un reve homo erotique de la mort... jme reveille, je suis sure qu'il est genre 7 ou 8 heure du matin... ben non... 11 heure et demi du soir...
Alors j'essaye le truc que tu me dit et ca me donne ca
Comment un truc APRES la compilation peut-il donner une erreur lors de la compilation?Citation:
Il y a eu des erreurs dans la compilation d'un script :
c:\Users\Wildhorn\AppData\Local\Temp\bswuhdxv.0.cs(1,283) : error CS1540: Cannot access protected member 'Arcomage.Form1.txtRecruits1' via a qualifier of type 'Arcomage.Form1'; the qualifier must be of type 'Arcomage.ClassTmp' (or derived from it)
Mais bon... jai changer mon txtbox pour Public et ca FONCTIONNE!
Merci...
Et la jme rend compte que ya pas de smiley ovation... alors voici une vague :P
:lahola::lahola::lahola:
Avant de clicker sur resolu... yaurait til un moyen de guarder mon textbox en protected?
Ouais, je trouve ca bizzare aussi. Tant pis... c'est pas la fin du monde anyway.
Vraiment, pense sérieusement à utiliser un interpréteur de script, du genre LuaInterface! Ca s'interface très très facilement avec dotnet (VB ou C#), tu peux trouver des renseignements partour dans google, le télécharger aussi... et ta ligne de commande, qui n'est pas écrite en C# ni en VB mais en Lua, s'exécute en tout et pour tout avec la commande:
C'est peut-être moins sportif que d'écrire 50 lignes pour compiler du C# à la volée, créer des instances par réflexion et les exécuter de même, mais au moins, ça a l'avantage de fonctionner et d'être simple!Code:lua.DoString("commande")