2009-11-09 4 views
1

Вот пример кода. Я успешно понял, как скомпилировать это. Я захватил место и смог использовать визуальный студийный браузер объектов для просмотра DLL. Я не могу понять, как получить экземпляр класса и вызвать функцию.Доступ к классу и функции после компиляции (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"); 
     //... 
    } 

ответ

1

Хммм действительно поздно ответ, но это, как вы бы вызвать метод из CodeDOM скомпилирован класса

Вы должны использовать отражение для создания сборки из результатов компилятора ... (ваш вар кр)

Assembly assembly = cr.CompiledAssembly; 

Затем вы должны создать экземпляр класса, который вы хотите

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

Затем вы вызываете любой метод внутри класса

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

И с тем, что когда-либо метод, который вы вызывается были возвращены теперь было бы значение «результат» вар .... довольно легко.