2009-11-09 10 views
1

Exemples de code. J'ai réussi à comprendre comment compiler cela. J'ai attrapé l'emplacement et était capable d'utiliser le navigateur d'objet de studios visuels pour regarder à travers la DLL. Je n'arrive pas à comprendre comment obtenir une instance de classe et appeler une fonction.Accès à la classe et à la fonction après la compilation (CompiledAssembly)

public static void test() 
    { 
     JScriptCodeProvider js = new JScriptCodeProvider(); 
     System.CodeDom.Compiler.CompilerParameters param = new System.CodeDom.Compiler.CompilerParameters(); 
     var cr = js.CompileAssemblyFromSource(param, new string[] { "package pkg { class b { public function increment(x) { return x+1; } } }" }); 
     foreach (var e in cr.Errors) { 
      var s = e.ToString(); 
     } 
     var asm = cr.CompiledAssembly; 
     var module = cr.CompiledAssembly.GetModules(); 
//or var module = cr.CompiledAssembly.GetModule("JScript Module"); 
     //... 
    } 

Répondre

1

Hmmm sur la fin realy réponse, mais voici comment vous appeler une méthode à partir d'un CodeDom compilé classe

Vous devez utiliser la réflexion pour créer un ensemble de résultats du compilateur ... (votre var cr)

Assembly assembly = cr.CompiledAssembly; 

Ensuite, vous devez créer une instance de la classe que vous voulez

object sourceClass = assembly.CreateInstance("YourNamespace.YourClass"); 

Ensuite vous invoquez une méthode dans la classe

var result = sourceClass.GetType().InvokeMember("YourMethod", BindingFlags.InvokeMethod, null, sourceClass, new object[] { *Parameters go here* }); 

Et que tout ce que la méthode que vous invoquez devait retourné maintenant serait la valeur du var « résultat » .... assez facile.