1

コード例をいくつか示します。これをコンパイルする方法がわかりました。その場所をつかみ、ビジュアル スタジオのオブジェクト ブラウザを使用して DLL を調べることができました。クラスインスタンスを取得して関数を呼び出す方法がわかりません。

    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");
        //...
    }
4

1 に答える 1

1

うーん、答えは本当に遅れましたが、これは CodeDom コンパイル済みクラスからメソッドを呼び出す方法です

リフレクションを使用して、コンパイラの結果からアセンブリを作成する必要があります...(変数 cr)

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* });

そして、呼び出したメソッドが返さなければならなかったものは、「結果」変数の値になります....非常に簡単です。

于 2010-07-22T23:04:02.033 に答える