예제 #1
0
        /// <summary>
        /// Creates a function to be evaluated.
        /// </summary>
        /// <param name="_input"></param>
        /// <returns></returns>
        public static FunctionBaseCore CreateFunction(string _input)
        {
            Microsoft.VisualBasic.VBCodeProvider codecompiler = new Microsoft.VisualBasic.VBCodeProvider();
            CodeCompileUnit ccu = new System.CodeDom.CodeCompileUnit();

            CodeNamespace dom_namespace = pGetNameSpace();
            CodeTypeDeclaration dom_class = pGetClass();
            CodeMemberMethod dom_func = pGetFunc(_input);

            dom_class.Members.Add(dom_func);
            dom_namespace.Types.Add(dom_class);
            ccu.Namespaces.Add(dom_namespace);

            CompilerParameters paras = pGetPara();
            CompilerResults output = codecompiler.CompileAssemblyFromDom(paras, ccu);

            foreach (CompilerError CE in output.Errors)
            {
            }

            //pGetCompileCode(codecompiler, ccu);

            Assembly codebase = output.CompiledAssembly;
            object classbase = codebase.CreateInstance("DOMSpace.DOMClass");
            Type func_class = codebase.GetModules()[0].GetType("DOMSpace.DOMClass");
            Type[] temp = codebase.GetModules()[0].GetTypes();
            MethodInfo invoker = func_class.GetMethod("DOMfunc");

            pGetCompileCode(codecompiler, ccu);

            return new FunctionBaseCore(classbase, invoker);
        }