예제 #1
0
        public static object CallScript(string code, object host, string function = null, params object[] arguments)
        {
            object script = SimpleScriptSite.HostScript(code, host);

            if (function == null)
            {
                return(script);
            }
            return(script.GetType().InvokeMember(function, BindingFlags.InvokeMethod, null, script, arguments));
        }
예제 #2
0
        protected object ActivateScript(string scriptFile, bool startup = false)
        {
            if (!startup)
            {
                SimpleScriptSite obj = ScriptAdapter.CreateScriptObject <SimpleScriptSite>(scriptFile);
                obj.Host = this;
                return(obj);
            }

            Active      = ScriptAdapter.CreateScriptObject <SimpleScriptHost>(scriptFile);
            Active.Host = this;

            string[] extAsms = Directory.GetFiles(".", "*.dll");
            foreach (string extAsm in extAsms)
            {
                string cmdName = Path.GetFileNameWithoutExtension(extAsm);
                try
                {
                    Assembly asm = Assembly.LoadFrom(extAsm);
                    Type     t   = asm.GetType("Scripting.HostExtension");
                    if (t == null)
                    {
                        continue;
                    }
                    MemberInfo[] info = t.GetMember("Invoke", BindingFlags.Public | BindingFlags.Static);
                    if (info != null && info.Length > 0)
                    {
                        FieldInfo hostField = t.GetField("Invoker", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
                        if (hostField != null)
                        {
                            hostField.SetValue(null, Active);
                        }
                        extCache.Add(cmdName, info);
                    }
                }
                catch {}
            }

            return(Active);
        }